class MrDarcy::Promise::EM
EventMachine implementation of promises.
See MrDarcy::Promise::Base
for method documentation.
Public Class Methods
new(*args)
click to toggle source
Calls superclass method
MrDarcy::Promise::Base::new
# File lib/mr_darcy/promise/em.rb, line 13 def initialize *args Kernel::raise "EventMachine driver is unsupported on JRuby, sorry" if RUBY_ENGINE=='jruby' unless EventMachine.reactor_running? ::Thread.new { EventMachine.run } ::Thread.pass until EventMachine.reactor_running? end @wait_lock = Mutex.new @wait_cond = ConditionVariable.new @wait_lock.lock deferrable_adapter.callback &method(:do_resolve) deferrable_adapter.errback &method(:do_reject) super end
Public Instance Methods
final()
click to toggle source
# File lib/mr_darcy/promise/em.rb, line 42 def final wait_if_unresolved self end
reject(value)
click to toggle source
# File lib/mr_darcy/promise/em.rb, line 32 def reject value deferrable_adapter.set_deferred_status :failed, value self end
resolve(value)
click to toggle source
# File lib/mr_darcy/promise/em.rb, line 27 def resolve value deferrable_adapter.set_deferred_status :succeeded, value self end
result()
click to toggle source
# File lib/mr_darcy/promise/em.rb, line 37 def result wait_if_unresolved value end
Private Instance Methods
deferrable_adapter()
click to toggle source
# File lib/mr_darcy/promise/em.rb, line 53 def deferrable_adapter @deferrable_adapter ||= DeferrableAdapter.new end
did_reject(value)
click to toggle source
# File lib/mr_darcy/promise/em.rb, line 73 def did_reject value notify_waiting end
did_resolve(value)
click to toggle source
# File lib/mr_darcy/promise/em.rb, line 69 def did_resolve value notify_waiting end
generate_child_promise()
click to toggle source
# File lib/mr_darcy/promise/em.rb, line 65 def generate_child_promise ChildPromise.new driver: :em end
notify_waiting()
click to toggle source
# File lib/mr_darcy/promise/em.rb, line 77 def notify_waiting EventMachine.defer { @wait_cond.signal } end
resolve_or_reject_child_as_needed()
click to toggle source
Calls superclass method
MrDarcy::Promise::Base#resolve_or_reject_child_as_needed
# File lib/mr_darcy/promise/em.rb, line 61 def resolve_or_reject_child_as_needed EventMachine.defer { super } end
schedule_promise(&block)
click to toggle source
# File lib/mr_darcy/promise/em.rb, line 57 def schedule_promise &block EventMachine.defer block end
wait_if_unresolved()
click to toggle source
# File lib/mr_darcy/promise/em.rb, line 49 def wait_if_unresolved @wait_cond.wait @wait_lock if unresolved? end