class MrDarcy::Promise::ChildPromise
A special variety of promise created by Base#then
and Base#fail
methods.
Attributes
promise[RW]
reject_block[RW]
resolve_block[RW]
Public Class Methods
new(opts={})
click to toggle source
# File lib/mr_darcy/promise/child_promise.rb, line 9 def initialize opts={} self.promise = MrDarcy.promise(opts) {} end
Public Instance Methods
parent_rejected(value)
click to toggle source
Called by the parent promise when it rejects.
# File lib/mr_darcy/promise/child_promise.rb, line 27 def parent_rejected value begin return reject_with value unless handles_reject? new_value = result_for :reject, value return defer_resolution_via new_value if thenable? new_value resolve_with new_value rescue Exception => e handle_exception e end end
parent_resolved(value)
click to toggle source
Called by the parent promise when it resolves.
# File lib/mr_darcy/promise/child_promise.rb, line 14 def parent_resolved value begin return resolve_with value unless handles_resolve? new_value = result_for :resolve, value return defer_resolution_via new_value if thenable? new_value resolve_with new_value rescue Exception => e handle_exception e end end
Private Instance Methods
defer_resolution_via(new_promise)
click to toggle source
# File lib/mr_darcy/promise/child_promise.rb, line 72 def defer_resolution_via new_promise new_promise.then do |value| resolve_with value value end new_promise.fail do |exception| reject_with exception exception end end
handle_exception(e)
click to toggle source
# File lib/mr_darcy/promise/child_promise.rb, line 41 def handle_exception e if promise.unresolved? return reject_with e elsif promise.resolved? promise.then { raise e } elsif promise.rejected? promise.fail { raise e } end end
handles_reject?()
click to toggle source
# File lib/mr_darcy/promise/child_promise.rb, line 60 def handles_reject? !!reject_block end
handles_resolve?()
click to toggle source
# File lib/mr_darcy/promise/child_promise.rb, line 64 def handles_resolve? !!resolve_block end
reject_with(exception)
click to toggle source
# File lib/mr_darcy/promise/child_promise.rb, line 87 def reject_with exception promise.reject exception end
resolve_with(value)
click to toggle source
# File lib/mr_darcy/promise/child_promise.rb, line 83 def resolve_with value promise.resolve value end
result_for(which, value)
click to toggle source
# File lib/mr_darcy/promise/child_promise.rb, line 51 def result_for which, value block = public_send("#{which}_block") if block block.call value else value end end
thenable?(object)
click to toggle source
# File lib/mr_darcy/promise/child_promise.rb, line 68 def thenable? object object.respond_to?(:then) && object.respond_to?(:fail) end