Class: Faraday::Adapter::EMSynchrony
- Inherits:
-
Faraday::Adapter
- Object
- Middleware
- Faraday::Adapter
- Faraday::Adapter::EMSynchrony
- Defined in:
- lib/faraday/adapter/em_synchrony.rb,
lib/faraday/adapter/em_synchrony/parallel_manager.rb
Defined Under Namespace
Classes: ParallelManager
Constant Summary
Constant Summary
Constants inherited from Faraday::Adapter
Instance Attribute Summary
Attributes included from Parallelism
Class Method Summary (collapse)
Instance Method Summary (collapse)
Methods inherited from Faraday::Adapter
Methods included from Parallelism
#inherited, #supports_parallel?
Methods included from MiddlewareRegistry
#lookup_middleware, #register_middleware
Methods included from Faraday::AutoloadHelper
#all_loaded_constants, #autoload_all, #load_autoloaded_constants
Methods inherited from Middleware
dependency, inherited, #initialize, loaded?, new
Constructor Details
This class inherits a constructor from Faraday::Middleware
Class Method Details
+ (Object) setup_parallel_manager(options = {})
15 16 17 |
# File 'lib/faraday/adapter/em_synchrony.rb', line 15 def self.setup_parallel_manager( = {}) ParallelManager.new end |
Instance Method Details
- (Object) call(env)
19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 |
# File 'lib/faraday/adapter/em_synchrony.rb', line 19 def call(env) super request = EventMachine::HttpRequest.new(URI::parse(env[:url].to_s)) = {:head => env[:request_headers]} [:ssl] = env[:ssl] if env[:ssl] if env[:body] if env[:body].respond_to? :read [:body] = env[:body].read else [:body] = env[:body] end end if req = env[:request] if proxy = req[:proxy] uri = URI.parse(proxy[:uri]) [:proxy] = { :host => uri.host, :port => uri.port } if proxy[:username] && proxy[:password] [:proxy][:authorization] = [proxy[:username], proxy[:password]] end end # only one timeout currently supported by em http request if req[:timeout] or req[:open_timeout] [:timeout] = [req[:timeout] || 0, req[:open_timeout] || 0].max end end http_method = env[:method].to_s.downcase.to_sym # Queue requests for parallel execution. if env[:parallel_manager] env[:parallel_manager].add(request, http_method, ) do |resp| save_response(env, resp.response_header.status, resp.response) do |resp_headers| resp.response_header.each do |name, value| resp_headers[name.to_sym] = value end end # Finalize the response object with values from `env`. env[:response].finish(env) end # Execute single request. else client = nil block = lambda { request.send(http_method, ) } if !EM.reactor_running? EM.run do Fiber.new { client = block.call EM.stop }.resume end else client = block.call end save_response(env, client.response_header.status, client.response) do |resp_headers| client.response_header.each do |name, value| resp_headers[name.to_sym] = value end end end @app.call env rescue Errno::ECONNREFUSED raise Error::ConnectionFailed, $! end |