]> git.donarmstrong.com Git - dsa-puppet.git/blob - 3rdparty/modules/aviator/lib/puppet/feature/faraday/adapter/rack.rb
try again, with puppetforge modules, correctly included now
[dsa-puppet.git] / 3rdparty / modules / aviator / lib / puppet / feature / faraday / adapter / rack.rb
1 module Faraday
2   class Adapter
3     # Sends requests to a Rack app.
4     #
5     # Examples
6     #
7     #   class MyRackApp
8     #     def call(env)
9     #       [200, {'Content-Type' => 'text/html'}, ["hello world"]]
10     #     end
11     #   end
12     #
13     #   Faraday.new do |conn|
14     #     conn.adapter :rack, MyRackApp.new
15     #   end
16     class Rack < Faraday::Adapter
17       dependency 'rack/test'
18
19       # not prefixed with "HTTP_"
20       SPECIAL_HEADERS = %w[ CONTENT_LENGTH CONTENT_TYPE ]
21
22       def initialize(faraday_app, rack_app)
23         super(faraday_app)
24         mock_session = ::Rack::MockSession.new(rack_app)
25         @session     = ::Rack::Test::Session.new(mock_session)
26       end
27
28       def call(env)
29         super
30         rack_env = {
31           :method => env[:method],
32           :input  => env[:body].respond_to?(:read) ? env[:body].read : env[:body],
33           'rack.url_scheme' => env[:url].scheme
34         }
35
36         env[:request_headers].each do |name, value|
37           name = name.upcase.tr('-', '_')
38           name = "HTTP_#{name}" unless SPECIAL_HEADERS.include? name
39           rack_env[name] = value
40         end if env[:request_headers]
41
42         timeout  = env[:request][:timeout] || env[:request][:open_timeout]
43         response = if timeout
44           Timer.timeout(timeout, Faraday::Error::TimeoutError) { execute_request(env, rack_env) }
45         else
46           execute_request(env, rack_env)
47         end
48
49         save_response(env, response.status, response.body, response.headers)
50         @app.call env
51       end
52
53       def execute_request(env, rack_env)
54         @session.request(env[:url].to_s, rack_env)
55       end
56     end
57   end
58 end