class Q::Promise
Public Class Methods
new(defer)
click to toggle source
# File lib/q/promise.rb, line 2 def initialize(defer) @defer = defer @thens = [] @fails = [] @alwayses = [] end
Public Instance Methods
always(&block)
click to toggle source
# File lib/q/promise.rb, line 18 def always(&block) enqueue_and_call(@alwayses, block, :finished?) end
fail(&block)
click to toggle source
# File lib/q/promise.rb, line 14 def fail(&block) enqueue_and_call(@fails, block, :rejected?) end
fulfill(type, result)
click to toggle source
# File lib/q/promise.rb, line 22 def fulfill(type, result) @result = result if type == :resolved @thens.each { |callback| callback.call(@result) } elsif type == :rejected @fails.each { |callback| callback.call(@result) } end @alwayses.each { |callback| callback.call(@result) } end
then(&block)
click to toggle source
# File lib/q/promise.rb, line 10 def then(&block) enqueue_and_call(@thens, block, :resolved?) end
Private Instance Methods
enqueue_and_call(queue, block, call_condition)
click to toggle source
# File lib/q/promise.rb, line 36 def enqueue_and_call(queue, block, call_condition) callback = Q::Callback.new(self, block) queue << callback callback.call(@result) if @defer.send(call_condition) self end