Class: GH::FaradayAdapter::Manager

Inherits:
Object
  • Object
show all
Defined in:
lib/gh/faraday_adapter.rb

Instance Method Summary collapse

Constructor Details

#initializeManager

Returns a new instance of Manager.



12
13
14
15
# File 'lib/gh/faraday_adapter.rb', line 12

def initialize(*)
  @mutex    = Mutex.new
  @requests = {}
end

Instance Method Details

#add_request(http, env, adapter) ⇒ Object



17
18
19
20
21
22
23
24
25
# File 'lib/gh/faraday_adapter.rb', line 17

def add_request(http, env, adapter)
  url = env[:url] + '/'
  env[:adapter] = adapter

  @mutex.synchronize do
    @requests[url] ||= []
    @requests[url] << env
  end
end

#runObject



27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
# File 'lib/gh/faraday_adapter.rb', line 27

def run
  requests = nil
  @mutex.synchronize { requests, @requests = @requests, {} }
  http = Net::HTTP::Persistent.new 'GH'
  requests.each do |url, envs|
    _requests = envs.map { |env| env[:adapter].create_request(env) }
    responses = http.pipeline(url, _requests)
    envs.zip(responses) do |env, http_response|
      env[:adapter].save_response(env, http_response.code.to_i, http_response.body) do |headers|
        http_response.each_header { |key, value| headers[key] = value }
      end
      env[:response].finish(env)
    end
  end
end