Class: EmAlldone

Inherits:
Object
  • Object
show all
Defined in:
lib/em_alldone.rb

Overview

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.

Defined Under Namespace

Modules: Version

Instance Method Summary collapse

Constructor Details

#initialize(*deferrables, &block) ⇒ EmAlldone

Returns a new instance of EmAlldone.

Raises:

  • (ArgumentError)


9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# File 'lib/em_alldone.rb', line 9

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

Instance Method Details

#callback(&block) ⇒ Object



25
26
27
28
29
30
31
32
33
34
35
36
# File 'lib/em_alldone.rb', line 25

def callback &block
  current_proc = Proc.new do
    @deferrable.callback &block
    @deferrable.errback  &block
  end

  if @recurse
    @recurse.callback &current_proc
  else
    current_proc.call
  end
end