class Faraday::Adapter::EMSynchrony::ParallelManager

A parallel manager for EMSynchrony.

Public Instance Methods

add(request, method, *args, &block) click to toggle source

Add requests to queue.

@param request [EM::HttpRequest] @param method [Symbol, String] HTTP method @param args [Array] the rest of the positional arguments

# File lib/faraday/adapter/em_synchrony/parallel_manager.rb, line 13
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 24
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

Private Instance Methods

perform() click to toggle source

Main ‘EM::Synchrony::Multi` performer.

# File lib/faraday/adapter/em_synchrony/parallel_manager.rb, line 47
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 42
def queue
  @queue ||= []
end