class Faraday::Adapter::EMSynchrony::ParallelManager
A parallel manager for EMSynchrony.
def add(request, method, *args, &block)
-
args
(Array
) -- the rest of the positional arguments -
method
(Symbol, String
) -- HTTP method -
request
(EM::HttpRequest
) --
def add(request, method, *args, &block) queue << { request: request, method: method, args: args, block: block } end
def perform
def perform multi = ::EM::Synchrony::Multi.new queue.each do |item| method = "a#{item[:method]}".to_sym req = item[:request].send(method, *item[:args]) req.callback(&item[:block]) req_name = "req_#{multi.requests.size}".to_sym multi.add(req_name, req) end # Clear the queue, so parallel manager objects can be reused. @queue = [] # Block fiber until all requests have returned. multi.perform end
def queue
def queue @queue ||= [] end
def run
Run all requests on queue with `EM::Synchrony::Multi`, wrapping
def run result = nil if !EM.reactor_running? EM.run do Fiber.new do result = perform EM.stop end.resume end else result = perform end result end