Skip to content

Instantly share code, notes, and snippets.

@whatupdave
Created March 7, 2012 07:36
Show Gist options
  • Save whatupdave/1991646 to your computer and use it in GitHub Desktop.
Save whatupdave/1991646 to your computer and use it in GitHub Desktop.
EM::Multi
multi = EventMachine::Multi.new
multi.add :query1, query1
multi.add :query2, query2
multi.callback do |results|
puts results
end
module EventMachine
class Multi
include EventMachine::Deferrable
attr_reader :requests, :responses
def initialize
@requests = []
@responses = {:callback => {}, :errback => {}}
end
def add name, deferrable
@requests.push deferrable
deferrable.callback { |result| @responses[:callback][name] = result; check_progress }
deferrable.errback { |result| @responses[:errback][name] = result; check_progress }
end
def finished?
(@responses[:callback].size + @responses[:errback].size) == @requests.size
end
protected
# invoke callback if all requests have completed
def check_progress
succeed(@responses[:callback]) if finished?
end
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment