class EmAlldone
Not a genuine Deferrable in that it doesn’t include EM::Deferrable. Callbacks set will be run when all the passed in deferrables have completed with either success or failure. Doesn’t support errbacks.
Public Class Methods
new(*deferrables, &block)
click to toggle source
# File lib/em_alldone.rb, line 49 def initialize(*deferrables, &block) deferrables = deferrables.flatten raise ArgumentError, "Must provide at least one argument" unless deferrables.size > 0 deferrables.each do |d| raise ArgumentError, "All arguments must be deferrables, but #{d.inspect} doesn't." unless d.respond_to?(:callback) && d.respond_to?(:errback) end @deferrable = deferrables[-1] if deferrables.size > 1 @recurse = EmAlldone.new deferrables[0...-1] end self.callback &block if block end
with(deferrables, *args, &block)
click to toggle source
Returns an instance. However, it ensures that when the callback is called it is called with the specified arguments.
# File lib/em_alldone.rb, line 42 def self.with(deferrables, *args, &block) deferrables = deferrables.flatten deferrables << BasicDeferrable.new deferrables[-1].succeed *args new(deferrables, &block) end
Public Instance Methods
callback(&block)
click to toggle source
# File lib/em_alldone.rb, line 65 def callback &block current_proc = Proc.new do @deferrable.callback &block @deferrable.errback &block end if @recurse @recurse.callback ¤t_proc else current_proc.call end end