class Reacto::Operations::Inject

Public Class Methods

new(injector, initial = NO_VALUE) click to toggle source
# File lib/reacto/operations/inject.rb, line 7
def initialize(injector, initial = NO_VALUE)
  @injector = injector
  @initial = initial
end

Public Instance Methods

call(tracker) click to toggle source
# File lib/reacto/operations/inject.rb, line 12
def call(tracker)
  @current = @initial
  @has_values = false

  inject = -> (v) do
    if @current == NO_VALUE
      @current = v
    else
      @current = @injector.call(@current, v)
    end

    @has_values = true
    tracker.on_value(@current)
  end

  close = -> () do
    unless @has_values || @current == NO_VALUE
      tracker.on_value(@current)
    end

    tracker.on_close
  end

  error = -> (e) do
    unless @has_values || @current == NO_VALUE
      tracker.on_value(@current)
    end

    tracker.on_error(e)
  end

  Subscriptions::OperationSubscription.new(
    tracker, value: inject, close: close, error: error
  )
end