Sha256: c86502f89afb86f26f1912a4dfcca9ddfe966e341513dd454a9b78962bb0b776
Contents?: true
Size: 1003 Bytes
Versions: 3
Compression:
Stored size: 1003 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.is_a?(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
3 entries across 3 versions & 1 rubygems
Version | Path |
---|---|
promise.rb-0.7.1 | lib/promise/group.rb |
promise.rb-0.7.0 | lib/promise/group.rb |
promise.rb-0.7.0.rc2 | lib/promise/group.rb |