class Reacto::Operations::Take

Public Class Methods

new(how_many_to_take) click to toggle source
# File lib/reacto/operations/take.rb, line 6
def initialize(how_many_to_take)
  if how_many_to_take < 0
    raise ArgumentError.new('Attempt to take negative size!')
  end

  @how_many_to_take = how_many_to_take
end

Public Instance Methods

call(tracker) click to toggle source
# File lib/reacto/operations/take.rb, line 14
def call(tracker)
  taken = 0
  closed = false

  behaviour = -> (value) do
    return if closed
    if taken < @how_many_to_take
      tracker.on_value(value)
      taken += 1
    else
      closed = true
      tracker.on_close
    end
  end

  Subscriptions::OperationSubscription.new(tracker, value: behaviour)
end