faraday 1.10.0 → 2.7.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
 - data/CHANGELOG.md +197 -3
 - data/LICENSE.md +1 -1
 - data/README.md +20 -17
 - data/Rakefile +3 -1
 - data/examples/client_spec.rb +41 -19
 - data/examples/client_test.rb +48 -22
 - data/lib/faraday/adapter/test.rb +61 -12
 - data/lib/faraday/adapter.rb +5 -9
 - data/lib/faraday/connection.rb +58 -145
 - data/lib/faraday/encoders/nested_params_encoder.rb +13 -6
 - data/lib/faraday/error.rb +16 -5
 - data/lib/faraday/logging/formatter.rb +27 -14
 - data/lib/faraday/middleware.rb +3 -1
 - data/lib/faraday/middleware_registry.rb +17 -63
 - data/lib/faraday/options/connection_options.rb +7 -6
 - data/lib/faraday/options/env.rb +85 -62
 - data/lib/faraday/options/proxy_options.rb +7 -3
 - data/lib/faraday/options/request_options.rb +7 -6
 - data/lib/faraday/options/ssl_options.rb +56 -45
 - data/lib/faraday/options.rb +4 -3
 - data/lib/faraday/rack_builder.rb +23 -20
 - data/lib/faraday/request/authorization.rb +33 -41
 - data/lib/faraday/request/instrumentation.rb +5 -1
 - data/lib/faraday/request/json.rb +10 -1
 - data/lib/faraday/request/url_encoded.rb +5 -1
 - data/lib/faraday/request.rb +15 -31
 - data/lib/faraday/response/json.rb +4 -4
 - data/lib/faraday/response/logger.rb +6 -0
 - data/lib/faraday/response/raise_error.rb +11 -1
 - data/lib/faraday/response.rb +9 -21
 - data/lib/faraday/utils/headers.rb +7 -2
 - data/lib/faraday/utils.rb +10 -5
 - data/lib/faraday/version.rb +1 -1
 - data/lib/faraday.rb +8 -44
 - data/spec/faraday/adapter/test_spec.rb +65 -0
 - data/spec/faraday/connection_spec.rb +163 -91
 - data/spec/faraday/error_spec.rb +31 -6
 - data/spec/faraday/middleware_registry_spec.rb +31 -0
 - data/spec/faraday/middleware_spec.rb +18 -0
 - data/spec/faraday/options/env_spec.rb +8 -2
 - data/spec/faraday/options/options_spec.rb +1 -1
 - data/spec/faraday/options/proxy_options_spec.rb +8 -0
 - data/spec/faraday/params_encoders/nested_spec.rb +8 -0
 - data/spec/faraday/rack_builder_spec.rb +26 -54
 - data/spec/faraday/request/authorization_spec.rb +50 -28
 - data/spec/faraday/request/instrumentation_spec.rb +5 -7
 - data/spec/faraday/request/json_spec.rb +24 -0
 - data/spec/faraday/request/url_encoded_spec.rb +12 -2
 - data/spec/faraday/request_spec.rb +5 -15
 - data/spec/faraday/response/json_spec.rb +4 -6
 - data/spec/faraday/response/logger_spec.rb +38 -0
 - data/spec/faraday/response/raise_error_spec.rb +19 -4
 - data/spec/faraday/response_spec.rb +3 -1
 - data/spec/faraday/utils/headers_spec.rb +22 -4
 - data/spec/faraday/utils_spec.rb +63 -1
 - data/spec/support/fake_safe_buffer.rb +1 -1
 - data/spec/support/helper_methods.rb +0 -37
 - data/spec/support/shared_examples/adapter.rb +2 -2
 - data/spec/support/shared_examples/request_method.rb +22 -21
 - metadata +14 -149
 - data/lib/faraday/adapter/typhoeus.rb +0 -15
 - data/lib/faraday/autoload.rb +0 -87
 - data/lib/faraday/dependency_loader.rb +0 -37
 - data/lib/faraday/request/basic_authentication.rb +0 -20
 - data/lib/faraday/request/token_authentication.rb +0 -20
 - data/spec/faraday/adapter/em_http_spec.rb +0 -49
 - data/spec/faraday/adapter/em_synchrony_spec.rb +0 -18
 - data/spec/faraday/adapter/excon_spec.rb +0 -49
 - data/spec/faraday/adapter/httpclient_spec.rb +0 -73
 - data/spec/faraday/adapter/net_http_spec.rb +0 -64
 - data/spec/faraday/adapter/patron_spec.rb +0 -18
 - data/spec/faraday/adapter/rack_spec.rb +0 -8
 - data/spec/faraday/adapter/typhoeus_spec.rb +0 -7
 - data/spec/faraday/composite_read_io_spec.rb +0 -80
 - data/spec/faraday/response/middleware_spec.rb +0 -68
 - data/spec/support/webmock_rack_app.rb +0 -68
 
| 
         @@ -1,20 +0,0 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            # frozen_string_literal: true
         
     | 
| 
       2 
     | 
    
         
            -
             
     | 
| 
       3 
     | 
    
         
            -
            require 'base64'
         
     | 
| 
       4 
     | 
    
         
            -
             
     | 
| 
       5 
     | 
    
         
            -
            module Faraday
         
     | 
| 
       6 
     | 
    
         
            -
              class Request
         
     | 
| 
       7 
     | 
    
         
            -
                # Authorization middleware for Basic Authentication.
         
     | 
| 
       8 
     | 
    
         
            -
                class BasicAuthentication < load_middleware(:authorization)
         
     | 
| 
       9 
     | 
    
         
            -
                  # @param login [String]
         
     | 
| 
       10 
     | 
    
         
            -
                  # @param pass [String]
         
     | 
| 
       11 
     | 
    
         
            -
                  #
         
     | 
| 
       12 
     | 
    
         
            -
                  # @return [String] a Basic Authentication header line
         
     | 
| 
       13 
     | 
    
         
            -
                  def self.header(login, pass)
         
     | 
| 
       14 
     | 
    
         
            -
                    value = Base64.encode64([login, pass].join(':'))
         
     | 
| 
       15 
     | 
    
         
            -
                    value.delete!("\n")
         
     | 
| 
       16 
     | 
    
         
            -
                    super(:Basic, value)
         
     | 
| 
       17 
     | 
    
         
            -
                  end
         
     | 
| 
       18 
     | 
    
         
            -
                end
         
     | 
| 
       19 
     | 
    
         
            -
              end
         
     | 
| 
       20 
     | 
    
         
            -
            end
         
     | 
| 
         @@ -1,20 +0,0 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            # frozen_string_literal: true
         
     | 
| 
       2 
     | 
    
         
            -
             
     | 
| 
       3 
     | 
    
         
            -
            module Faraday
         
     | 
| 
       4 
     | 
    
         
            -
              class Request
         
     | 
| 
       5 
     | 
    
         
            -
                # TokenAuthentication is a middleware that adds a 'Token' header to a
         
     | 
| 
       6 
     | 
    
         
            -
                # Faraday request.
         
     | 
| 
       7 
     | 
    
         
            -
                class TokenAuthentication < load_middleware(:authorization)
         
     | 
| 
       8 
     | 
    
         
            -
                  # Public
         
     | 
| 
       9 
     | 
    
         
            -
                  def self.header(token, options = nil)
         
     | 
| 
       10 
     | 
    
         
            -
                    options ||= {}
         
     | 
| 
       11 
     | 
    
         
            -
                    options[:token] = token
         
     | 
| 
       12 
     | 
    
         
            -
                    super(:Token, options)
         
     | 
| 
       13 
     | 
    
         
            -
                  end
         
     | 
| 
       14 
     | 
    
         
            -
             
     | 
| 
       15 
     | 
    
         
            -
                  def initialize(app, token, options = nil)
         
     | 
| 
       16 
     | 
    
         
            -
                    super(app, token, options)
         
     | 
| 
       17 
     | 
    
         
            -
                  end
         
     | 
| 
       18 
     | 
    
         
            -
                end
         
     | 
| 
       19 
     | 
    
         
            -
              end
         
     | 
| 
       20 
     | 
    
         
            -
            end
         
     | 
| 
         @@ -1,49 +0,0 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            # frozen_string_literal: true
         
     | 
| 
       2 
     | 
    
         
            -
             
     | 
| 
       3 
     | 
    
         
            -
            unless defined?(JRUBY_VERSION)
         
     | 
| 
       4 
     | 
    
         
            -
              RSpec.describe Faraday::Adapter::EMHttp do
         
     | 
| 
       5 
     | 
    
         
            -
                features :request_body_on_query_methods, :reason_phrase_parse, :trace_method,
         
     | 
| 
       6 
     | 
    
         
            -
                         :skip_response_body_on_head, :parallel, :local_socket_binding
         
     | 
| 
       7 
     | 
    
         
            -
             
     | 
| 
       8 
     | 
    
         
            -
                it_behaves_like 'an adapter'
         
     | 
| 
       9 
     | 
    
         
            -
             
     | 
| 
       10 
     | 
    
         
            -
                it 'allows to provide adapter specific configs' do
         
     | 
| 
       11 
     | 
    
         
            -
                  url = URI('https://example.com:1234')
         
     | 
| 
       12 
     | 
    
         
            -
                  adapter = described_class.new nil, inactivity_timeout: 20
         
     | 
| 
       13 
     | 
    
         
            -
                  req = adapter.create_request(url: url, request: {})
         
     | 
| 
       14 
     | 
    
         
            -
             
     | 
| 
       15 
     | 
    
         
            -
                  expect(req.connopts.inactivity_timeout).to eq(20)
         
     | 
| 
       16 
     | 
    
         
            -
                end
         
     | 
| 
       17 
     | 
    
         
            -
             
     | 
| 
       18 
     | 
    
         
            -
                context 'Options' do
         
     | 
| 
       19 
     | 
    
         
            -
                  let(:request) { Faraday::RequestOptions.new }
         
     | 
| 
       20 
     | 
    
         
            -
                  let(:env) { { request: request } }
         
     | 
| 
       21 
     | 
    
         
            -
                  let(:options) { {} }
         
     | 
| 
       22 
     | 
    
         
            -
                  let(:adapter) { Faraday::Adapter::EMHttp.new }
         
     | 
| 
       23 
     | 
    
         
            -
             
     | 
| 
       24 
     | 
    
         
            -
                  it 'configures timeout' do
         
     | 
| 
       25 
     | 
    
         
            -
                    request.timeout = 5
         
     | 
| 
       26 
     | 
    
         
            -
                    adapter.configure_timeout(options, env)
         
     | 
| 
       27 
     | 
    
         
            -
                    expect(options[:inactivity_timeout]).to eq(5)
         
     | 
| 
       28 
     | 
    
         
            -
                    expect(options[:connect_timeout]).to eq(5)
         
     | 
| 
       29 
     | 
    
         
            -
                  end
         
     | 
| 
       30 
     | 
    
         
            -
             
     | 
| 
       31 
     | 
    
         
            -
                  it 'configures timeout and open_timeout' do
         
     | 
| 
       32 
     | 
    
         
            -
                    request.timeout = 5
         
     | 
| 
       33 
     | 
    
         
            -
                    request.open_timeout = 1
         
     | 
| 
       34 
     | 
    
         
            -
                    adapter.configure_timeout(options, env)
         
     | 
| 
       35 
     | 
    
         
            -
                    expect(options[:inactivity_timeout]).to eq(5)
         
     | 
| 
       36 
     | 
    
         
            -
                    expect(options[:connect_timeout]).to eq(1)
         
     | 
| 
       37 
     | 
    
         
            -
                  end
         
     | 
| 
       38 
     | 
    
         
            -
             
     | 
| 
       39 
     | 
    
         
            -
                  it 'configures all timeout settings' do
         
     | 
| 
       40 
     | 
    
         
            -
                    request.timeout = 5
         
     | 
| 
       41 
     | 
    
         
            -
                    request.read_timeout = 3
         
     | 
| 
       42 
     | 
    
         
            -
                    request.open_timeout = 1
         
     | 
| 
       43 
     | 
    
         
            -
                    adapter.configure_timeout(options, env)
         
     | 
| 
       44 
     | 
    
         
            -
                    expect(options[:inactivity_timeout]).to eq(3)
         
     | 
| 
       45 
     | 
    
         
            -
                    expect(options[:connect_timeout]).to eq(1)
         
     | 
| 
       46 
     | 
    
         
            -
                  end
         
     | 
| 
       47 
     | 
    
         
            -
                end
         
     | 
| 
       48 
     | 
    
         
            -
              end
         
     | 
| 
       49 
     | 
    
         
            -
            end
         
     | 
| 
         @@ -1,18 +0,0 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            # frozen_string_literal: true
         
     | 
| 
       2 
     | 
    
         
            -
             
     | 
| 
       3 
     | 
    
         
            -
            unless defined?(JRUBY_VERSION)
         
     | 
| 
       4 
     | 
    
         
            -
              RSpec.describe Faraday::Adapter::EMSynchrony do
         
     | 
| 
       5 
     | 
    
         
            -
                features :request_body_on_query_methods, :reason_phrase_parse,
         
     | 
| 
       6 
     | 
    
         
            -
                         :skip_response_body_on_head, :parallel, :local_socket_binding
         
     | 
| 
       7 
     | 
    
         
            -
             
     | 
| 
       8 
     | 
    
         
            -
                it_behaves_like 'an adapter'
         
     | 
| 
       9 
     | 
    
         
            -
             
     | 
| 
       10 
     | 
    
         
            -
                it 'allows to provide adapter specific configs' do
         
     | 
| 
       11 
     | 
    
         
            -
                  url = URI('https://example.com:1234')
         
     | 
| 
       12 
     | 
    
         
            -
                  adapter = described_class.new nil, inactivity_timeout: 20
         
     | 
| 
       13 
     | 
    
         
            -
                  req = adapter.create_request(url: url, request: {})
         
     | 
| 
       14 
     | 
    
         
            -
             
     | 
| 
       15 
     | 
    
         
            -
                  expect(req.connopts.inactivity_timeout).to eq(20)
         
     | 
| 
       16 
     | 
    
         
            -
                end
         
     | 
| 
       17 
     | 
    
         
            -
              end
         
     | 
| 
       18 
     | 
    
         
            -
            end
         
     | 
| 
         @@ -1,49 +0,0 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            # frozen_string_literal: true
         
     | 
| 
       2 
     | 
    
         
            -
             
     | 
| 
       3 
     | 
    
         
            -
            RSpec.describe Faraday::Adapter::Excon do
         
     | 
| 
       4 
     | 
    
         
            -
              features :request_body_on_query_methods, :reason_phrase_parse, :trace_method
         
     | 
| 
       5 
     | 
    
         
            -
             
     | 
| 
       6 
     | 
    
         
            -
              it_behaves_like 'an adapter'
         
     | 
| 
       7 
     | 
    
         
            -
             
     | 
| 
       8 
     | 
    
         
            -
              it 'allows to provide adapter specific configs' do
         
     | 
| 
       9 
     | 
    
         
            -
                url = URI('https://example.com:1234')
         
     | 
| 
       10 
     | 
    
         
            -
             
     | 
| 
       11 
     | 
    
         
            -
                adapter = described_class.new(nil, debug_request: true)
         
     | 
| 
       12 
     | 
    
         
            -
             
     | 
| 
       13 
     | 
    
         
            -
                conn = adapter.build_connection(url: url)
         
     | 
| 
       14 
     | 
    
         
            -
             
     | 
| 
       15 
     | 
    
         
            -
                expect(conn.data[:debug_request]).to be_truthy
         
     | 
| 
       16 
     | 
    
         
            -
              end
         
     | 
| 
       17 
     | 
    
         
            -
             
     | 
| 
       18 
     | 
    
         
            -
              context 'config' do
         
     | 
| 
       19 
     | 
    
         
            -
                let(:adapter) { Faraday::Adapter::Excon.new }
         
     | 
| 
       20 
     | 
    
         
            -
                let(:request) { Faraday::RequestOptions.new }
         
     | 
| 
       21 
     | 
    
         
            -
                let(:uri) { URI.parse('https://example.com') }
         
     | 
| 
       22 
     | 
    
         
            -
                let(:env) { { request: request, url: uri } }
         
     | 
| 
       23 
     | 
    
         
            -
             
     | 
| 
       24 
     | 
    
         
            -
                it 'sets timeout' do
         
     | 
| 
       25 
     | 
    
         
            -
                  request.timeout = 5
         
     | 
| 
       26 
     | 
    
         
            -
                  options = adapter.send(:opts_from_env, env)
         
     | 
| 
       27 
     | 
    
         
            -
                  expect(options[:read_timeout]).to eq(5)
         
     | 
| 
       28 
     | 
    
         
            -
                  expect(options[:write_timeout]).to eq(5)
         
     | 
| 
       29 
     | 
    
         
            -
                  expect(options[:connect_timeout]).to eq(5)
         
     | 
| 
       30 
     | 
    
         
            -
                end
         
     | 
| 
       31 
     | 
    
         
            -
             
     | 
| 
       32 
     | 
    
         
            -
                it 'sets timeout and open_timeout' do
         
     | 
| 
       33 
     | 
    
         
            -
                  request.timeout = 5
         
     | 
| 
       34 
     | 
    
         
            -
                  request.open_timeout = 3
         
     | 
| 
       35 
     | 
    
         
            -
                  options = adapter.send(:opts_from_env, env)
         
     | 
| 
       36 
     | 
    
         
            -
                  expect(options[:read_timeout]).to eq(5)
         
     | 
| 
       37 
     | 
    
         
            -
                  expect(options[:write_timeout]).to eq(5)
         
     | 
| 
       38 
     | 
    
         
            -
                  expect(options[:connect_timeout]).to eq(3)
         
     | 
| 
       39 
     | 
    
         
            -
                end
         
     | 
| 
       40 
     | 
    
         
            -
             
     | 
| 
       41 
     | 
    
         
            -
                it 'sets open_timeout' do
         
     | 
| 
       42 
     | 
    
         
            -
                  request.open_timeout = 3
         
     | 
| 
       43 
     | 
    
         
            -
                  options = adapter.send(:opts_from_env, env)
         
     | 
| 
       44 
     | 
    
         
            -
                  expect(options[:read_timeout]).to eq(nil)
         
     | 
| 
       45 
     | 
    
         
            -
                  expect(options[:write_timeout]).to eq(nil)
         
     | 
| 
       46 
     | 
    
         
            -
                  expect(options[:connect_timeout]).to eq(3)
         
     | 
| 
       47 
     | 
    
         
            -
                end
         
     | 
| 
       48 
     | 
    
         
            -
              end
         
     | 
| 
       49 
     | 
    
         
            -
            end
         
     | 
| 
         @@ -1,73 +0,0 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            # frozen_string_literal: true
         
     | 
| 
       2 
     | 
    
         
            -
             
     | 
| 
       3 
     | 
    
         
            -
            RSpec.describe Faraday::Adapter::HTTPClient do
         
     | 
| 
       4 
     | 
    
         
            -
              # ruby gem defaults for testing purposes
         
     | 
| 
       5 
     | 
    
         
            -
              HTTPCLIENT_OPEN = 60
         
     | 
| 
       6 
     | 
    
         
            -
              HTTPCLIENT_READ = 60
         
     | 
| 
       7 
     | 
    
         
            -
              HTTPCLIENT_WRITE = 120
         
     | 
| 
       8 
     | 
    
         
            -
             
     | 
| 
       9 
     | 
    
         
            -
              features :request_body_on_query_methods, :reason_phrase_parse, :compression,
         
     | 
| 
       10 
     | 
    
         
            -
                       :trace_method, :local_socket_binding
         
     | 
| 
       11 
     | 
    
         
            -
             
     | 
| 
       12 
     | 
    
         
            -
              it_behaves_like 'an adapter'
         
     | 
| 
       13 
     | 
    
         
            -
             
     | 
| 
       14 
     | 
    
         
            -
              it 'allows to provide adapter specific configs' do
         
     | 
| 
       15 
     | 
    
         
            -
                adapter = described_class.new do |client|
         
     | 
| 
       16 
     | 
    
         
            -
                  client.keep_alive_timeout = 20
         
     | 
| 
       17 
     | 
    
         
            -
                  client.ssl_config.timeout = 25
         
     | 
| 
       18 
     | 
    
         
            -
                end
         
     | 
| 
       19 
     | 
    
         
            -
             
     | 
| 
       20 
     | 
    
         
            -
                client = adapter.build_connection(url: URI.parse('https://example.com'))
         
     | 
| 
       21 
     | 
    
         
            -
                expect(client.keep_alive_timeout).to eq(20)
         
     | 
| 
       22 
     | 
    
         
            -
                expect(client.ssl_config.timeout).to eq(25)
         
     | 
| 
       23 
     | 
    
         
            -
              end
         
     | 
| 
       24 
     | 
    
         
            -
             
     | 
| 
       25 
     | 
    
         
            -
              context 'Options' do
         
     | 
| 
       26 
     | 
    
         
            -
                let(:request) { Faraday::RequestOptions.new }
         
     | 
| 
       27 
     | 
    
         
            -
                let(:env) { { request: request } }
         
     | 
| 
       28 
     | 
    
         
            -
                let(:options) { {} }
         
     | 
| 
       29 
     | 
    
         
            -
                let(:adapter) { Faraday::Adapter::HTTPClient.new }
         
     | 
| 
       30 
     | 
    
         
            -
                let(:client) { adapter.connection(url: URI.parse('https://example.com')) }
         
     | 
| 
       31 
     | 
    
         
            -
             
     | 
| 
       32 
     | 
    
         
            -
                it 'configures timeout' do
         
     | 
| 
       33 
     | 
    
         
            -
                  assert_default_timeouts!
         
     | 
| 
       34 
     | 
    
         
            -
             
     | 
| 
       35 
     | 
    
         
            -
                  request.timeout = 5
         
     | 
| 
       36 
     | 
    
         
            -
                  adapter.configure_timeouts(client, request)
         
     | 
| 
       37 
     | 
    
         
            -
             
     | 
| 
       38 
     | 
    
         
            -
                  expect(client.connect_timeout).to eq(5)
         
     | 
| 
       39 
     | 
    
         
            -
                  expect(client.send_timeout).to eq(5)
         
     | 
| 
       40 
     | 
    
         
            -
                  expect(client.receive_timeout).to eq(5)
         
     | 
| 
       41 
     | 
    
         
            -
                end
         
     | 
| 
       42 
     | 
    
         
            -
             
     | 
| 
       43 
     | 
    
         
            -
                it 'configures open timeout' do
         
     | 
| 
       44 
     | 
    
         
            -
                  assert_default_timeouts!
         
     | 
| 
       45 
     | 
    
         
            -
             
     | 
| 
       46 
     | 
    
         
            -
                  request.open_timeout = 1
         
     | 
| 
       47 
     | 
    
         
            -
                  adapter.configure_timeouts(client, request)
         
     | 
| 
       48 
     | 
    
         
            -
             
     | 
| 
       49 
     | 
    
         
            -
                  expect(client.connect_timeout).to eq(1)
         
     | 
| 
       50 
     | 
    
         
            -
                  expect(client.send_timeout).to eq(HTTPCLIENT_WRITE)
         
     | 
| 
       51 
     | 
    
         
            -
                  expect(client.receive_timeout).to eq(HTTPCLIENT_READ)
         
     | 
| 
       52 
     | 
    
         
            -
                end
         
     | 
| 
       53 
     | 
    
         
            -
             
     | 
| 
       54 
     | 
    
         
            -
                it 'configures multiple timeouts' do
         
     | 
| 
       55 
     | 
    
         
            -
                  assert_default_timeouts!
         
     | 
| 
       56 
     | 
    
         
            -
             
     | 
| 
       57 
     | 
    
         
            -
                  request.open_timeout = 1
         
     | 
| 
       58 
     | 
    
         
            -
                  request.write_timeout = 10
         
     | 
| 
       59 
     | 
    
         
            -
                  request.read_timeout = 5
         
     | 
| 
       60 
     | 
    
         
            -
                  adapter.configure_timeouts(client, request)
         
     | 
| 
       61 
     | 
    
         
            -
             
     | 
| 
       62 
     | 
    
         
            -
                  expect(client.connect_timeout).to eq(1)
         
     | 
| 
       63 
     | 
    
         
            -
                  expect(client.send_timeout).to eq(10)
         
     | 
| 
       64 
     | 
    
         
            -
                  expect(client.receive_timeout).to eq(5)
         
     | 
| 
       65 
     | 
    
         
            -
                end
         
     | 
| 
       66 
     | 
    
         
            -
             
     | 
| 
       67 
     | 
    
         
            -
                def assert_default_timeouts!
         
     | 
| 
       68 
     | 
    
         
            -
                  expect(client.connect_timeout).to eq(HTTPCLIENT_OPEN)
         
     | 
| 
       69 
     | 
    
         
            -
                  expect(client.send_timeout).to eq(HTTPCLIENT_WRITE)
         
     | 
| 
       70 
     | 
    
         
            -
                  expect(client.receive_timeout).to eq(HTTPCLIENT_READ)
         
     | 
| 
       71 
     | 
    
         
            -
                end
         
     | 
| 
       72 
     | 
    
         
            -
              end
         
     | 
| 
       73 
     | 
    
         
            -
            end
         
     | 
| 
         @@ -1,64 +0,0 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            # frozen_string_literal: true
         
     | 
| 
       2 
     | 
    
         
            -
             
     | 
| 
       3 
     | 
    
         
            -
            RSpec.describe Faraday::Adapter::NetHttp do
         
     | 
| 
       4 
     | 
    
         
            -
              features :request_body_on_query_methods, :reason_phrase_parse, :compression, :streaming, :trace_method
         
     | 
| 
       5 
     | 
    
         
            -
             
     | 
| 
       6 
     | 
    
         
            -
              it_behaves_like 'an adapter'
         
     | 
| 
       7 
     | 
    
         
            -
             
     | 
| 
       8 
     | 
    
         
            -
              context 'checking http' do
         
     | 
| 
       9 
     | 
    
         
            -
                let(:url) { URI('http://example.com') }
         
     | 
| 
       10 
     | 
    
         
            -
                let(:adapter) { described_class.new }
         
     | 
| 
       11 
     | 
    
         
            -
                let(:http) { adapter.send(:connection, url: url, request: {}) }
         
     | 
| 
       12 
     | 
    
         
            -
             
     | 
| 
       13 
     | 
    
         
            -
                it { expect(http.port).to eq(80) }
         
     | 
| 
       14 
     | 
    
         
            -
             
     | 
| 
       15 
     | 
    
         
            -
                it 'sets max_retries to 0' do
         
     | 
| 
       16 
     | 
    
         
            -
                  adapter.send(:configure_request, http, {})
         
     | 
| 
       17 
     | 
    
         
            -
             
     | 
| 
       18 
     | 
    
         
            -
                  expect(http.max_retries).to eq(0) if http.respond_to?(:max_retries=)
         
     | 
| 
       19 
     | 
    
         
            -
                end
         
     | 
| 
       20 
     | 
    
         
            -
             
     | 
| 
       21 
     | 
    
         
            -
                it 'supports write_timeout' do
         
     | 
| 
       22 
     | 
    
         
            -
                  adapter.send(:configure_request, http, write_timeout: 10)
         
     | 
| 
       23 
     | 
    
         
            -
             
     | 
| 
       24 
     | 
    
         
            -
                  expect(http.write_timeout).to eq(10) if http.respond_to?(:write_timeout=)
         
     | 
| 
       25 
     | 
    
         
            -
                end
         
     | 
| 
       26 
     | 
    
         
            -
             
     | 
| 
       27 
     | 
    
         
            -
                it 'supports open_timeout' do
         
     | 
| 
       28 
     | 
    
         
            -
                  adapter.send(:configure_request, http, open_timeout: 10)
         
     | 
| 
       29 
     | 
    
         
            -
             
     | 
| 
       30 
     | 
    
         
            -
                  expect(http.open_timeout).to eq(10)
         
     | 
| 
       31 
     | 
    
         
            -
                end
         
     | 
| 
       32 
     | 
    
         
            -
             
     | 
| 
       33 
     | 
    
         
            -
                it 'supports read_timeout' do
         
     | 
| 
       34 
     | 
    
         
            -
                  adapter.send(:configure_request, http, read_timeout: 10)
         
     | 
| 
       35 
     | 
    
         
            -
             
     | 
| 
       36 
     | 
    
         
            -
                  expect(http.read_timeout).to eq(10)
         
     | 
| 
       37 
     | 
    
         
            -
                end
         
     | 
| 
       38 
     | 
    
         
            -
             
     | 
| 
       39 
     | 
    
         
            -
                context 'with https url' do
         
     | 
| 
       40 
     | 
    
         
            -
                  let(:url) { URI('https://example.com') }
         
     | 
| 
       41 
     | 
    
         
            -
             
     | 
| 
       42 
     | 
    
         
            -
                  it { expect(http.port).to eq(443) }
         
     | 
| 
       43 
     | 
    
         
            -
                end
         
     | 
| 
       44 
     | 
    
         
            -
             
     | 
| 
       45 
     | 
    
         
            -
                context 'with http url including port' do
         
     | 
| 
       46 
     | 
    
         
            -
                  let(:url) { URI('https://example.com:1234') }
         
     | 
| 
       47 
     | 
    
         
            -
             
     | 
| 
       48 
     | 
    
         
            -
                  it { expect(http.port).to eq(1234) }
         
     | 
| 
       49 
     | 
    
         
            -
                end
         
     | 
| 
       50 
     | 
    
         
            -
             
     | 
| 
       51 
     | 
    
         
            -
                context 'with custom adapter config' do
         
     | 
| 
       52 
     | 
    
         
            -
                  let(:adapter) do
         
     | 
| 
       53 
     | 
    
         
            -
                    described_class.new do |http|
         
     | 
| 
       54 
     | 
    
         
            -
                      http.continue_timeout = 123
         
     | 
| 
       55 
     | 
    
         
            -
                    end
         
     | 
| 
       56 
     | 
    
         
            -
                  end
         
     | 
| 
       57 
     | 
    
         
            -
             
     | 
| 
       58 
     | 
    
         
            -
                  it do
         
     | 
| 
       59 
     | 
    
         
            -
                    adapter.send(:configure_request, http, {})
         
     | 
| 
       60 
     | 
    
         
            -
                    expect(http.continue_timeout).to eq(123)
         
     | 
| 
       61 
     | 
    
         
            -
                  end
         
     | 
| 
       62 
     | 
    
         
            -
                end
         
     | 
| 
       63 
     | 
    
         
            -
              end
         
     | 
| 
       64 
     | 
    
         
            -
            end
         
     | 
| 
         @@ -1,18 +0,0 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            # frozen_string_literal: true
         
     | 
| 
       2 
     | 
    
         
            -
             
     | 
| 
       3 
     | 
    
         
            -
            RSpec.describe Faraday::Adapter::Patron, unless: defined?(JRUBY_VERSION) do
         
     | 
| 
       4 
     | 
    
         
            -
              features :reason_phrase_parse
         
     | 
| 
       5 
     | 
    
         
            -
             
     | 
| 
       6 
     | 
    
         
            -
              it_behaves_like 'an adapter'
         
     | 
| 
       7 
     | 
    
         
            -
             
     | 
| 
       8 
     | 
    
         
            -
              it 'allows to provide adapter specific configs' do
         
     | 
| 
       9 
     | 
    
         
            -
                conn = Faraday.new do |f|
         
     | 
| 
       10 
     | 
    
         
            -
                  f.adapter :patron do |session|
         
     | 
| 
       11 
     | 
    
         
            -
                    session.max_redirects = 10
         
     | 
| 
       12 
     | 
    
         
            -
                    raise 'Configuration block called'
         
     | 
| 
       13 
     | 
    
         
            -
                  end
         
     | 
| 
       14 
     | 
    
         
            -
                end
         
     | 
| 
       15 
     | 
    
         
            -
             
     | 
| 
       16 
     | 
    
         
            -
                expect { conn.get('/') }.to raise_error(RuntimeError, 'Configuration block called')
         
     | 
| 
       17 
     | 
    
         
            -
              end
         
     | 
| 
       18 
     | 
    
         
            -
            end
         
     | 
| 
         @@ -1,80 +0,0 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            # frozen_string_literal: true
         
     | 
| 
       2 
     | 
    
         
            -
             
     | 
| 
       3 
     | 
    
         
            -
            require 'stringio'
         
     | 
| 
       4 
     | 
    
         
            -
             
     | 
| 
       5 
     | 
    
         
            -
            RSpec.describe Faraday::CompositeReadIO do
         
     | 
| 
       6 
     | 
    
         
            -
              Part = Struct.new(:to_io) do
         
     | 
| 
       7 
     | 
    
         
            -
                def length
         
     | 
| 
       8 
     | 
    
         
            -
                  to_io.string.length
         
     | 
| 
       9 
     | 
    
         
            -
                end
         
     | 
| 
       10 
     | 
    
         
            -
              end
         
     | 
| 
       11 
     | 
    
         
            -
             
     | 
| 
       12 
     | 
    
         
            -
              def part(str)
         
     | 
| 
       13 
     | 
    
         
            -
                Part.new StringIO.new(str)
         
     | 
| 
       14 
     | 
    
         
            -
              end
         
     | 
| 
       15 
     | 
    
         
            -
             
     | 
| 
       16 
     | 
    
         
            -
              def composite_io(*parts)
         
     | 
| 
       17 
     | 
    
         
            -
                Faraday::CompositeReadIO.new(*parts)
         
     | 
| 
       18 
     | 
    
         
            -
              end
         
     | 
| 
       19 
     | 
    
         
            -
             
     | 
| 
       20 
     | 
    
         
            -
              context 'with empty composite_io' do
         
     | 
| 
       21 
     | 
    
         
            -
                subject { composite_io }
         
     | 
| 
       22 
     | 
    
         
            -
             
     | 
| 
       23 
     | 
    
         
            -
                it { expect(subject.length).to eq(0) }
         
     | 
| 
       24 
     | 
    
         
            -
                it { expect(subject.read).to eq('') }
         
     | 
| 
       25 
     | 
    
         
            -
                it { expect(subject.read(1)).to be_nil }
         
     | 
| 
       26 
     | 
    
         
            -
              end
         
     | 
| 
       27 
     | 
    
         
            -
             
     | 
| 
       28 
     | 
    
         
            -
              context 'with empty parts' do
         
     | 
| 
       29 
     | 
    
         
            -
                subject { composite_io(part(''), part('')) }
         
     | 
| 
       30 
     | 
    
         
            -
             
     | 
| 
       31 
     | 
    
         
            -
                it { expect(subject.length).to eq(0) }
         
     | 
| 
       32 
     | 
    
         
            -
                it { expect(subject.read).to eq('') }
         
     | 
| 
       33 
     | 
    
         
            -
                it { expect(subject.read(1)).to be_nil }
         
     | 
| 
       34 
     | 
    
         
            -
              end
         
     | 
| 
       35 
     | 
    
         
            -
             
     | 
| 
       36 
     | 
    
         
            -
              context 'with 2 parts' do
         
     | 
| 
       37 
     | 
    
         
            -
                subject { composite_io(part('abcd'), part('1234')) }
         
     | 
| 
       38 
     | 
    
         
            -
             
     | 
| 
       39 
     | 
    
         
            -
                it { expect(subject.length).to eq(8) }
         
     | 
| 
       40 
     | 
    
         
            -
                it { expect(subject.read).to eq('abcd1234') }
         
     | 
| 
       41 
     | 
    
         
            -
                it 'allows to read in chunks' do
         
     | 
| 
       42 
     | 
    
         
            -
                  expect(subject.read(3)).to eq('abc')
         
     | 
| 
       43 
     | 
    
         
            -
                  expect(subject.read(3)).to eq('d12')
         
     | 
| 
       44 
     | 
    
         
            -
                  expect(subject.read(3)).to eq('34')
         
     | 
| 
       45 
     | 
    
         
            -
                  expect(subject.read(3)).to be_nil
         
     | 
| 
       46 
     | 
    
         
            -
                end
         
     | 
| 
       47 
     | 
    
         
            -
                it 'allows to rewind while reading in chunks' do
         
     | 
| 
       48 
     | 
    
         
            -
                  expect(subject.read(3)).to eq('abc')
         
     | 
| 
       49 
     | 
    
         
            -
                  expect(subject.read(3)).to eq('d12')
         
     | 
| 
       50 
     | 
    
         
            -
                  subject.rewind
         
     | 
| 
       51 
     | 
    
         
            -
                  expect(subject.read(3)).to eq('abc')
         
     | 
| 
       52 
     | 
    
         
            -
                  expect(subject.read(5)).to eq('d1234')
         
     | 
| 
       53 
     | 
    
         
            -
                  expect(subject.read(3)).to be_nil
         
     | 
| 
       54 
     | 
    
         
            -
                  subject.rewind
         
     | 
| 
       55 
     | 
    
         
            -
                  expect(subject.read(2)).to eq('ab')
         
     | 
| 
       56 
     | 
    
         
            -
                end
         
     | 
| 
       57 
     | 
    
         
            -
              end
         
     | 
| 
       58 
     | 
    
         
            -
             
     | 
| 
       59 
     | 
    
         
            -
              context 'with mix of empty and non-empty parts' do
         
     | 
| 
       60 
     | 
    
         
            -
                subject { composite_io(part(''), part('abcd'), part(''), part('1234'), part('')) }
         
     | 
| 
       61 
     | 
    
         
            -
             
     | 
| 
       62 
     | 
    
         
            -
                it 'allows to read in chunks' do
         
     | 
| 
       63 
     | 
    
         
            -
                  expect(subject.read(6)).to eq('abcd12')
         
     | 
| 
       64 
     | 
    
         
            -
                  expect(subject.read(6)).to eq('34')
         
     | 
| 
       65 
     | 
    
         
            -
                  expect(subject.read(6)).to be_nil
         
     | 
| 
       66 
     | 
    
         
            -
                end
         
     | 
| 
       67 
     | 
    
         
            -
              end
         
     | 
| 
       68 
     | 
    
         
            -
             
     | 
| 
       69 
     | 
    
         
            -
              context 'with utf8 multibyte part' do
         
     | 
| 
       70 
     | 
    
         
            -
                subject { composite_io(part("\x86"), part('ファイル')) }
         
     | 
| 
       71 
     | 
    
         
            -
             
     | 
| 
       72 
     | 
    
         
            -
                it { expect(subject.read).to eq(String.new("\x86\xE3\x83\x95\xE3\x82\xA1\xE3\x82\xA4\xE3\x83\xAB", encoding: 'BINARY')) }
         
     | 
| 
       73 
     | 
    
         
            -
                it 'allows to read in chunks' do
         
     | 
| 
       74 
     | 
    
         
            -
                  expect(subject.read(3)).to eq(String.new("\x86\xE3\x83", encoding: 'BINARY'))
         
     | 
| 
       75 
     | 
    
         
            -
                  expect(subject.read(3)).to eq(String.new("\x95\xE3\x82", encoding: 'BINARY'))
         
     | 
| 
       76 
     | 
    
         
            -
                  expect(subject.read(8)).to eq(String.new("\xA1\xE3\x82\xA4\xE3\x83\xAB", encoding: 'BINARY'))
         
     | 
| 
       77 
     | 
    
         
            -
                  expect(subject.read(3)).to be_nil
         
     | 
| 
       78 
     | 
    
         
            -
                end
         
     | 
| 
       79 
     | 
    
         
            -
              end
         
     | 
| 
       80 
     | 
    
         
            -
            end
         
     | 
| 
         @@ -1,68 +0,0 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            # frozen_string_literal: true
         
     | 
| 
       2 
     | 
    
         
            -
             
     | 
| 
       3 
     | 
    
         
            -
            RSpec.describe Faraday::Response::Middleware do
         
     | 
| 
       4 
     | 
    
         
            -
              let(:conn) do
         
     | 
| 
       5 
     | 
    
         
            -
                Faraday.new do |b|
         
     | 
| 
       6 
     | 
    
         
            -
                  b.use custom_middleware
         
     | 
| 
       7 
     | 
    
         
            -
                  b.adapter :test do |stub|
         
     | 
| 
       8 
     | 
    
         
            -
                    stub.get('ok') { [200, { 'Content-Type' => 'text/html' }, '<body></body>'] }
         
     | 
| 
       9 
     | 
    
         
            -
                    stub.get('not_modified') { [304, nil, nil] }
         
     | 
| 
       10 
     | 
    
         
            -
                    stub.get('no_content') { [204, nil, nil] }
         
     | 
| 
       11 
     | 
    
         
            -
                  end
         
     | 
| 
       12 
     | 
    
         
            -
                end
         
     | 
| 
       13 
     | 
    
         
            -
              end
         
     | 
| 
       14 
     | 
    
         
            -
             
     | 
| 
       15 
     | 
    
         
            -
              context 'with a custom ResponseMiddleware' do
         
     | 
| 
       16 
     | 
    
         
            -
                let(:custom_middleware) do
         
     | 
| 
       17 
     | 
    
         
            -
                  Class.new(Faraday::Response::Middleware) do
         
     | 
| 
       18 
     | 
    
         
            -
                    def parse(body)
         
     | 
| 
       19 
     | 
    
         
            -
                      body.upcase
         
     | 
| 
       20 
     | 
    
         
            -
                    end
         
     | 
| 
       21 
     | 
    
         
            -
                  end
         
     | 
| 
       22 
     | 
    
         
            -
                end
         
     | 
| 
       23 
     | 
    
         
            -
             
     | 
| 
       24 
     | 
    
         
            -
                it 'parses the response' do
         
     | 
| 
       25 
     | 
    
         
            -
                  expect(conn.get('ok').body).to eq('<BODY></BODY>')
         
     | 
| 
       26 
     | 
    
         
            -
                end
         
     | 
| 
       27 
     | 
    
         
            -
              end
         
     | 
| 
       28 
     | 
    
         
            -
             
     | 
| 
       29 
     | 
    
         
            -
              context 'with a custom ResponseMiddleware and private parse' do
         
     | 
| 
       30 
     | 
    
         
            -
                let(:custom_middleware) do
         
     | 
| 
       31 
     | 
    
         
            -
                  Class.new(Faraday::Response::Middleware) do
         
     | 
| 
       32 
     | 
    
         
            -
                    private
         
     | 
| 
       33 
     | 
    
         
            -
             
     | 
| 
       34 
     | 
    
         
            -
                    def parse(body)
         
     | 
| 
       35 
     | 
    
         
            -
                      body.upcase
         
     | 
| 
       36 
     | 
    
         
            -
                    end
         
     | 
| 
       37 
     | 
    
         
            -
                  end
         
     | 
| 
       38 
     | 
    
         
            -
                end
         
     | 
| 
       39 
     | 
    
         
            -
             
     | 
| 
       40 
     | 
    
         
            -
                it 'parses the response' do
         
     | 
| 
       41 
     | 
    
         
            -
                  expect(conn.get('ok').body).to eq('<BODY></BODY>')
         
     | 
| 
       42 
     | 
    
         
            -
                end
         
     | 
| 
       43 
     | 
    
         
            -
              end
         
     | 
| 
       44 
     | 
    
         
            -
             
     | 
| 
       45 
     | 
    
         
            -
              context 'with a custom ResponseMiddleware but empty response' do
         
     | 
| 
       46 
     | 
    
         
            -
                let(:custom_middleware) do
         
     | 
| 
       47 
     | 
    
         
            -
                  Class.new(Faraday::Response::Middleware) do
         
     | 
| 
       48 
     | 
    
         
            -
                    def parse(_body)
         
     | 
| 
       49 
     | 
    
         
            -
                      raise 'this should not be called'
         
     | 
| 
       50 
     | 
    
         
            -
                    end
         
     | 
| 
       51 
     | 
    
         
            -
                  end
         
     | 
| 
       52 
     | 
    
         
            -
                end
         
     | 
| 
       53 
     | 
    
         
            -
             
     | 
| 
       54 
     | 
    
         
            -
                it 'raises exception for 200 responses' do
         
     | 
| 
       55 
     | 
    
         
            -
                  expect { conn.get('ok') }.to raise_error(StandardError)
         
     | 
| 
       56 
     | 
    
         
            -
                end
         
     | 
| 
       57 
     | 
    
         
            -
             
     | 
| 
       58 
     | 
    
         
            -
                it 'doesn\'t call the middleware for 204 responses' do
         
     | 
| 
       59 
     | 
    
         
            -
                  expect_any_instance_of(custom_middleware).not_to receive(:parse)
         
     | 
| 
       60 
     | 
    
         
            -
                  expect(conn.get('no_content').body).to be_nil
         
     | 
| 
       61 
     | 
    
         
            -
                end
         
     | 
| 
       62 
     | 
    
         
            -
             
     | 
| 
       63 
     | 
    
         
            -
                it 'doesn\'t call the middleware for 304 responses' do
         
     | 
| 
       64 
     | 
    
         
            -
                  expect_any_instance_of(custom_middleware).not_to receive(:parse)
         
     | 
| 
       65 
     | 
    
         
            -
                  expect(conn.get('not_modified').body).to be_nil
         
     | 
| 
       66 
     | 
    
         
            -
                end
         
     | 
| 
       67 
     | 
    
         
            -
              end
         
     | 
| 
       68 
     | 
    
         
            -
            end
         
     | 
| 
         @@ -1,68 +0,0 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            # frozen_string_literal: true
         
     | 
| 
       2 
     | 
    
         
            -
             
     | 
| 
       3 
     | 
    
         
            -
            # Rack app used to test the Rack adapter.
         
     | 
| 
       4 
     | 
    
         
            -
            # Uses Webmock to check if requests are registered, in which case it returns
         
     | 
| 
       5 
     | 
    
         
            -
            # the registered response.
         
     | 
| 
       6 
     | 
    
         
            -
            class WebmockRackApp
         
     | 
| 
       7 
     | 
    
         
            -
              def call(env)
         
     | 
| 
       8 
     | 
    
         
            -
                req_signature = WebMock::RequestSignature.new(
         
     | 
| 
       9 
     | 
    
         
            -
                  req_method(env),
         
     | 
| 
       10 
     | 
    
         
            -
                  req_uri(env),
         
     | 
| 
       11 
     | 
    
         
            -
                  body: req_body(env),
         
     | 
| 
       12 
     | 
    
         
            -
                  headers: req_headers(env)
         
     | 
| 
       13 
     | 
    
         
            -
                )
         
     | 
| 
       14 
     | 
    
         
            -
             
     | 
| 
       15 
     | 
    
         
            -
                WebMock::RequestRegistry
         
     | 
| 
       16 
     | 
    
         
            -
                  .instance
         
     | 
| 
       17 
     | 
    
         
            -
                  .requested_signatures
         
     | 
| 
       18 
     | 
    
         
            -
                  .put(req_signature)
         
     | 
| 
       19 
     | 
    
         
            -
             
     | 
| 
       20 
     | 
    
         
            -
                process_response(req_signature)
         
     | 
| 
       21 
     | 
    
         
            -
              end
         
     | 
| 
       22 
     | 
    
         
            -
             
     | 
| 
       23 
     | 
    
         
            -
              def req_method(env)
         
     | 
| 
       24 
     | 
    
         
            -
                env['REQUEST_METHOD'].downcase.to_sym
         
     | 
| 
       25 
     | 
    
         
            -
              end
         
     | 
| 
       26 
     | 
    
         
            -
             
     | 
| 
       27 
     | 
    
         
            -
              def req_uri(env)
         
     | 
| 
       28 
     | 
    
         
            -
                scheme = env['rack.url_scheme']
         
     | 
| 
       29 
     | 
    
         
            -
                host = env['SERVER_NAME']
         
     | 
| 
       30 
     | 
    
         
            -
                port = env['SERVER_PORT']
         
     | 
| 
       31 
     | 
    
         
            -
                path = env['PATH_INFO']
         
     | 
| 
       32 
     | 
    
         
            -
                query = env['QUERY_STRING']
         
     | 
| 
       33 
     | 
    
         
            -
             
     | 
| 
       34 
     | 
    
         
            -
                url = +"#{scheme}://#{host}:#{port}#{path}"
         
     | 
| 
       35 
     | 
    
         
            -
                url += "?#{query}" if query
         
     | 
| 
       36 
     | 
    
         
            -
             
     | 
| 
       37 
     | 
    
         
            -
                uri = WebMock::Util::URI.heuristic_parse(url)
         
     | 
| 
       38 
     | 
    
         
            -
                uri.path = uri.normalized_path.gsub('[^:]//', '/')
         
     | 
| 
       39 
     | 
    
         
            -
                uri
         
     | 
| 
       40 
     | 
    
         
            -
              end
         
     | 
| 
       41 
     | 
    
         
            -
             
     | 
| 
       42 
     | 
    
         
            -
              def req_headers(env)
         
     | 
| 
       43 
     | 
    
         
            -
                http_headers = env.select { |k, _| k.start_with?('HTTP_') }
         
     | 
| 
       44 
     | 
    
         
            -
                                  .map { |k, v| [k[5..-1], v] }
         
     | 
| 
       45 
     | 
    
         
            -
                                  .to_h
         
     | 
| 
       46 
     | 
    
         
            -
             
     | 
| 
       47 
     | 
    
         
            -
                special_headers = Faraday::Adapter::Rack::SPECIAL_HEADERS
         
     | 
| 
       48 
     | 
    
         
            -
                http_headers.merge(env.select { |k, _| special_headers.include?(k) })
         
     | 
| 
       49 
     | 
    
         
            -
              end
         
     | 
| 
       50 
     | 
    
         
            -
             
     | 
| 
       51 
     | 
    
         
            -
              def req_body(env)
         
     | 
| 
       52 
     | 
    
         
            -
                env['rack.input'].read
         
     | 
| 
       53 
     | 
    
         
            -
              end
         
     | 
| 
       54 
     | 
    
         
            -
             
     | 
| 
       55 
     | 
    
         
            -
              def process_response(req_signature)
         
     | 
| 
       56 
     | 
    
         
            -
                res = WebMock::StubRegistry.instance.response_for_request(req_signature)
         
     | 
| 
       57 
     | 
    
         
            -
             
     | 
| 
       58 
     | 
    
         
            -
                if res.nil? && req_signature.uri.host == 'localhost'
         
     | 
| 
       59 
     | 
    
         
            -
                  raise Faraday::ConnectionFailed, 'Trying to connect to localhost'
         
     | 
| 
       60 
     | 
    
         
            -
                end
         
     | 
| 
       61 
     | 
    
         
            -
             
     | 
| 
       62 
     | 
    
         
            -
                raise WebMock::NetConnectNotAllowedError, req_signature unless res
         
     | 
| 
       63 
     | 
    
         
            -
             
     | 
| 
       64 
     | 
    
         
            -
                raise Faraday::TimeoutError if res.should_timeout
         
     | 
| 
       65 
     | 
    
         
            -
             
     | 
| 
       66 
     | 
    
         
            -
                [res.status[0], res.headers || {}, [res.body || '']]
         
     | 
| 
       67 
     | 
    
         
            -
              end
         
     | 
| 
       68 
     | 
    
         
            -
            end
         
     |