class Reacto::Operations::Append

Attributes

to_append[R]

Public Class Methods

new(to_append, condition: nil) click to toggle source
# File lib/reacto/operations/append.rb, line 8
def initialize(to_append, condition: nil)
  @to_append = to_append
  @condition = condition
end

Public Instance Methods

call(tracker) click to toggle source
# File lib/reacto/operations/append.rb, line 13
def call(tracker)
  empty = true

  on_value =
    if @condition == :source_empty
      -> (v) do
        empty = false if empty
        tracker.on_value(v)
      end
    else
      tracker.method(:on_value)
    end

  on_close = -> () do
    if (@condition == :source_empty && empty) || @condition.nil?
      if to_append.respond_to? :each
        to_append.each { |v| tracker.on_value(v) }
      else
        tracker.on_value(to_append)
      end
    end

    tracker.on_close
  end

  Subscriptions::OperationSubscription.new(
    tracker, close: on_close, value: on_value
  )
end