Class: Reacto::Operations::Inject

Inherits:
Object
  • Object
show all
Defined in:
lib/reacto/operations/inject.rb

Instance Method Summary collapse

Constructor Details

#initialize(injector, initial = NO_VALUE) ⇒ Inject

Returns a new instance of Inject.



8
9
10
11
12
# File 'lib/reacto/operations/inject.rb', line 8

def initialize(injector, initial = NO_VALUE)
  @injector = injector
  @current = initial
  @has_values = false
end

Instance Method Details

#call(tracker) ⇒ Object



14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
# File 'lib/reacto/operations/inject.rb', line 14

def call(tracker)
  inject = lambda do |v|
    if @current == NO_VALUE
      @current = v
    else
      @current = @injector.call(@current, v)
    end

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

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

    tracker.on_close
  end

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