Sha256: b8cfbf9615cec2af133e7f0b206292ce8338858177cbe9ebddc08cff2f7b29e6
Contents?: true
Size: 1010 Bytes
Versions: 1
Compression:
Stored size: 1010 Bytes
Contents
class Promise class Group attr_reader :promise def initialize(result_promise, inputs) @promise = result_promise @inputs = inputs @remaining = count_promises if @remaining.zero? promise.fulfill(inputs) else chain_inputs end end private def chain_inputs on_fulfill = method(:on_fulfill) on_reject = promise.method(:reject) each_promise do |input_promise| input_promise.then(on_fulfill, on_reject) end end def on_fulfill(_result) @remaining -= 1 if @remaining.zero? result = @inputs.map { |obj| promise?(obj) ? obj.value : obj } promise.fulfill(result) end end def promise?(obj) obj.instance_of?(Promise) end def count_promises count = 0 each_promise { count += 1 } count end def each_promise @inputs.each do |obj| yield obj if promise?(obj) end end end private_constant :Group end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
promise.rb-0.7.0.rc1 | lib/promise/group.rb |