class Promise::Group

Attributes

promise[R]
source[RW]

Public Class Methods

new(result_promise, inputs) click to toggle source
# File lib/promise/group.rb, line 8
def initialize(result_promise, inputs)
  @promise = result_promise
  @inputs = inputs
  @remaining = count_promises

  if @remaining.zero?
    promise.fulfill(inputs)
  else
    promise.source = self
    chain_inputs
  end
end

Public Instance Methods

promise_fulfilled(_value = nil, _arg = nil) click to toggle source
# File lib/promise/group.rb, line 27
def promise_fulfilled(_value = nil, _arg = nil)
  @remaining -= 1
  if @remaining.zero?
    result = @inputs.map { |obj| promise?(obj) ? obj.value : obj }
    promise.fulfill(result)
  end
end
promise_rejected(reason, _arg = nil) click to toggle source
# File lib/promise/group.rb, line 35
def promise_rejected(reason, _arg = nil)
  promise.reject(reason)
end
wait() click to toggle source
# File lib/promise/group.rb, line 21
def wait
  each_promise do |input_promise|
    input_promise.wait if input_promise.pending?
  end
end

Private Instance Methods

chain_inputs() click to toggle source
# File lib/promise/group.rb, line 41
def chain_inputs
  each_promise do |input_promise|
    case input_promise.state
    when :fulfilled
      promise_fulfilled
    when :rejected
      promise_rejected(input_promise.reason)
    else
      input_promise.subscribe(self, nil, nil)
    end
  end
end
count_promises() click to toggle source
# File lib/promise/group.rb, line 58
def count_promises
  count = 0
  each_promise { count += 1 }
  count
end
each_promise() { |obj| ... } click to toggle source
# File lib/promise/group.rb, line 64
def each_promise
  @inputs.each do |obj|
    yield obj if promise?(obj)
  end
end
promise?(obj) click to toggle source
# File lib/promise/group.rb, line 54
def promise?(obj)
  obj.is_a?(Promise)
end