class Faraday::Adapter::EMSynchrony::ParallelManager
Public Instance Methods
add(request, method, *args, &block)
click to toggle source
Add requests to queue. The `request` argument should be a `EM::HttpRequest` object.
# File lib/faraday/adapter/em_synchrony/parallel_manager.rb, line 8 def add(request, method, *args, &block) queue << { :request => request, :method => method, :args => args, :block => block } end
run()
click to toggle source
Run all requests on queue with `EM::Synchrony::Multi`, wrapping it in a reactor and fiber if needed.
# File lib/faraday/adapter/em_synchrony/parallel_manager.rb, line 19 def run result = nil if !EM.reactor_running? EM.run { Fiber.new do result = perform EM.stop end.resume } else result = perform end result end
Private Instance Methods
perform()
click to toggle source
Main `EM::Synchrony::Multi` performer.
# File lib/faraday/adapter/em_synchrony/parallel_manager.rb, line 43 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
queue()
click to toggle source
The request queue.
# File lib/faraday/adapter/em_synchrony/parallel_manager.rb, line 38 def queue @queue ||= [] end