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