class Reacto::Operations::Partition

Public Class Methods

new(predicate, executor: nil) click to toggle source
# File lib/reacto/operations/partition.rb, line 7
def initialize(predicate, executor: nil)
  @predicate = predicate
  @executor = executor
end

Public Instance Methods

call(tracker) click to toggle source
# File lib/reacto/operations/partition.rb, line 12
def call(tracker)
  true_array = []
  false_array = []

  behavior = -> (val) do
    if @predicate.call(val)
      true_array << val
    else
      false_array << val
    end
  end

  error = -> (e) do
    emit_trackables(tracker, true_array, false_array)
    tracker.on_error(e)
  end

  close = -> () do
    emit_trackables(tracker, true_array, false_array)
    tracker.on_close
  end

  Subscriptions::OperationSubscription.new(
    tracker, value: behavior, error: error, close: close
  )
end
emit_trackables(tracker, true_array, false_array) click to toggle source
# File lib/reacto/operations/partition.rb, line 39
def emit_trackables(tracker, true_array, false_array)
  true_trackable = LabeledTrackable.new(
    true, @executor, &Behaviours.enumerable(true_array)
  )
  false_trackable = LabeledTrackable.new(
    false, @executor, &Behaviours.enumerable(false_array)
  )

  tracker.on_value(true_trackable)
  tracker.on_value(false_trackable)
end