]> git.donarmstrong.com Git - dsa-puppet.git/blob - 3rdparty/modules/aviator/feature/faraday/adapter/em_synchrony.rb
try again, with puppetforge modules, correctly included now
[dsa-puppet.git] / 3rdparty / modules / aviator / feature / faraday / adapter / em_synchrony.rb
1 require 'uri'
2
3 module Faraday
4   class Adapter
5     class EMSynchrony < Faraday::Adapter
6       include EMHttp::Options
7
8       dependency do
9         require 'em-synchrony/em-http'
10         require 'em-synchrony/em-multi'
11         require 'fiber'
12       end
13
14       self.supports_parallel = true
15
16       def self.setup_parallel_manager(options = {})
17         ParallelManager.new
18       end
19
20       def call(env)
21         super
22         request = EventMachine::HttpRequest.new(Utils::URI(env[:url].to_s), connection_config(env))
23
24         http_method = env[:method].to_s.downcase.to_sym
25
26         # Queue requests for parallel execution.
27         if env[:parallel_manager]
28           env[:parallel_manager].add(request, http_method, request_config(env)) do |resp|
29             save_response(env, resp.response_header.status, resp.response) do |resp_headers|
30               resp.response_header.each do |name, value|
31                 resp_headers[name.to_sym] = value
32               end
33             end
34
35             # Finalize the response object with values from `env`.
36             env[:response].finish(env)
37           end
38
39         # Execute single request.
40         else
41           client = nil
42           block = lambda { request.send(http_method, request_config(env)) }
43
44           if !EM.reactor_running?
45             EM.run do
46               Fiber.new {
47                 client = block.call
48                 EM.stop
49               }.resume
50             end
51           else
52             client = block.call
53           end
54
55           raise client.error if client.error
56
57           save_response(env, client.response_header.status, client.response) do |resp_headers|
58             client.response_header.each do |name, value|
59               resp_headers[name.to_sym] = value
60             end
61           end
62         end
63
64         @app.call env
65       rescue Errno::ECONNREFUSED
66         raise Error::ConnectionFailed, $!
67       rescue EventMachine::Connectify::CONNECTError => err
68         if err.message.include?("Proxy Authentication Required")
69           raise Error::ConnectionFailed, %{407 "Proxy Authentication Required "}
70         else
71           raise Error::ConnectionFailed, err
72         end
73       rescue => err
74         if defined?(OpenSSL) && OpenSSL::SSL::SSLError === err
75           raise Faraday::SSLError, err
76         else
77           raise
78         end
79       end
80     end
81   end
82 end
83
84 require 'faraday/adapter/em_synchrony/parallel_manager'
85
86 begin
87   require 'openssl'
88 rescue LoadError
89   warn "Warning: no such file to load -- openssl. Make sure it is installed if you want HTTPS support"
90 else
91   require 'faraday/adapter/em_http_ssl_patch'
92 end if Faraday::Adapter::EMSynchrony.loaded?