faraday 1.0.1 → 1.4.0
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 +104 -0
 - data/LICENSE.md +1 -1
 - data/README.md +3 -5
 - data/examples/client_spec.rb +1 -1
 - data/lib/faraday.rb +53 -41
 - data/lib/faraday/adapter.rb +1 -6
 - data/lib/faraday/adapter/em_http.rb +16 -13
 - data/lib/faraday/adapter/em_synchrony.rb +16 -13
 - data/lib/faraday/autoload.rb +1 -4
 - data/lib/faraday/connection.rb +5 -4
 - data/lib/faraday/encoders/flat_params_encoder.rb +9 -2
 - data/lib/faraday/encoders/nested_params_encoder.rb +7 -2
 - data/lib/faraday/error.rb +20 -0
 - data/lib/faraday/methods.rb +6 -0
 - data/lib/faraday/middleware.rb +14 -4
 - data/lib/faraday/options.rb +4 -8
 - data/lib/faraday/rack_builder.rb +13 -12
 - data/lib/faraday/request.rb +20 -10
 - data/lib/faraday/request/multipart.rb +9 -2
 - data/lib/faraday/request/retry.rb +2 -2
 - data/lib/faraday/response.rb +0 -6
 - data/lib/faraday/response/raise_error.rb +12 -1
 - data/lib/faraday/utils.rb +2 -2
 - data/lib/faraday/utils/headers.rb +2 -2
 - data/lib/faraday/version.rb +5 -0
 - data/spec/faraday/adapter/test_spec.rb +260 -0
 - data/spec/faraday/connection_spec.rb +30 -0
 - data/spec/faraday/error_spec.rb +15 -0
 - data/spec/faraday/middleware_spec.rb +32 -6
 - data/spec/faraday/params_encoders/flat_spec.rb +8 -0
 - data/spec/faraday/params_encoders/nested_spec.rb +8 -0
 - data/spec/faraday/rack_builder_spec.rb +149 -0
 - data/spec/faraday/request/authorization_spec.rb +2 -2
 - data/spec/faraday/request/multipart_spec.rb +41 -13
 - data/spec/faraday/request/retry_spec.rb +1 -1
 - data/spec/faraday/request_spec.rb +16 -5
 - data/spec/faraday/response/raise_error_spec.rb +63 -0
 - data/spec/support/shared_examples/adapter.rb +2 -1
 - data/spec/support/shared_examples/request_method.rb +39 -11
 - metadata +64 -9
 - data/lib/faraday/adapter/excon.rb +0 -124
 - data/lib/faraday/adapter/net_http.rb +0 -219
 - data/lib/faraday/adapter/net_http_persistent.rb +0 -91
 - data/spec/faraday/adapter/net_http_persistent_spec.rb +0 -57
 
| 
         @@ -33,9 +33,9 @@ module Faraday 
     | 
|
| 
       33 
33 
     | 
    
         
             
                      key = key.to_s if key.is_a?(Symbol)
         
     | 
| 
       34 
34 
     | 
    
         
             
                      [key, value]
         
     | 
| 
       35 
35 
     | 
    
         
             
                    end
         
     | 
| 
       36 
     | 
    
         
            -
             
     | 
| 
      
 36 
     | 
    
         
            +
             
     | 
| 
       37 
37 
     | 
    
         
             
                    # Only to be used for non-Array inputs. Arrays should preserve order.
         
     | 
| 
       38 
     | 
    
         
            -
                    params.sort!
         
     | 
| 
      
 38 
     | 
    
         
            +
                    params.sort! if @sort_params
         
     | 
| 
       39 
39 
     | 
    
         
             
                  end
         
     | 
| 
       40 
40 
     | 
    
         | 
| 
       41 
41 
     | 
    
         
             
                  # The params have form [['key1', 'value1'], ['key2', 'value2']].
         
     | 
| 
         @@ -94,5 +94,12 @@ module Faraday 
     | 
|
| 
       94 
94 
     | 
    
         
             
                    end
         
     | 
| 
       95 
95 
     | 
    
         
             
                  end
         
     | 
| 
       96 
96 
     | 
    
         
             
                end
         
     | 
| 
      
 97 
     | 
    
         
            +
             
     | 
| 
      
 98 
     | 
    
         
            +
                class << self
         
     | 
| 
      
 99 
     | 
    
         
            +
                  attr_accessor :sort_params
         
     | 
| 
      
 100 
     | 
    
         
            +
                end
         
     | 
| 
      
 101 
     | 
    
         
            +
             
     | 
| 
      
 102 
     | 
    
         
            +
                # Useful default for OAuth and caching.
         
     | 
| 
      
 103 
     | 
    
         
            +
                @sort_params = true
         
     | 
| 
       97 
104 
     | 
    
         
             
              end
         
     | 
| 
       98 
105 
     | 
    
         
             
            end
         
     | 
| 
         @@ -21,9 +21,9 @@ module Faraday 
     | 
|
| 
       21 
21 
     | 
    
         
             
                      key = key.to_s if key.is_a?(Symbol)
         
     | 
| 
       22 
22 
     | 
    
         
             
                      [key, value]
         
     | 
| 
       23 
23 
     | 
    
         
             
                    end
         
     | 
| 
       24 
     | 
    
         
            -
             
     | 
| 
      
 24 
     | 
    
         
            +
             
     | 
| 
       25 
25 
     | 
    
         
             
                    # Only to be used for non-Array inputs. Arrays should preserve order.
         
     | 
| 
       26 
     | 
    
         
            -
                    params.sort!
         
     | 
| 
      
 26 
     | 
    
         
            +
                    params.sort! if @sort_params
         
     | 
| 
       27 
27 
     | 
    
         
             
                  end
         
     | 
| 
       28 
28 
     | 
    
         | 
| 
       29 
29 
     | 
    
         
             
                  # The params have form [['key1', 'value1'], ['key2', 'value2']].
         
     | 
| 
         @@ -161,10 +161,15 @@ module Faraday 
     | 
|
| 
       161 
161 
     | 
    
         
             
              # for your requests.
         
     | 
| 
       162 
162 
     | 
    
         
             
              module NestedParamsEncoder
         
     | 
| 
       163 
163 
     | 
    
         
             
                class << self
         
     | 
| 
      
 164 
     | 
    
         
            +
                  attr_accessor :sort_params
         
     | 
| 
      
 165 
     | 
    
         
            +
             
     | 
| 
       164 
166 
     | 
    
         
             
                  extend Forwardable
         
     | 
| 
       165 
167 
     | 
    
         
             
                  def_delegators :'Faraday::Utils', :escape, :unescape
         
     | 
| 
       166 
168 
     | 
    
         
             
                end
         
     | 
| 
       167 
169 
     | 
    
         | 
| 
      
 170 
     | 
    
         
            +
                # Useful default for OAuth and caching.
         
     | 
| 
      
 171 
     | 
    
         
            +
                @sort_params = true
         
     | 
| 
      
 172 
     | 
    
         
            +
             
     | 
| 
       168 
173 
     | 
    
         
             
                extend EncodeMethods
         
     | 
| 
       169 
174 
     | 
    
         
             
                extend DecodeMethods
         
     | 
| 
       170 
175 
     | 
    
         
             
              end
         
     | 
    
        data/lib/faraday/error.rb
    CHANGED
    
    | 
         @@ -28,6 +28,18 @@ module Faraday 
     | 
|
| 
       28 
28 
     | 
    
         
             
                  %(#<#{self.class}#{inner}>)
         
     | 
| 
       29 
29 
     | 
    
         
             
                end
         
     | 
| 
       30 
30 
     | 
    
         | 
| 
      
 31 
     | 
    
         
            +
                def response_status
         
     | 
| 
      
 32 
     | 
    
         
            +
                  @response[:status] if @response
         
     | 
| 
      
 33 
     | 
    
         
            +
                end
         
     | 
| 
      
 34 
     | 
    
         
            +
             
     | 
| 
      
 35 
     | 
    
         
            +
                def response_headers
         
     | 
| 
      
 36 
     | 
    
         
            +
                  @response[:headers] if @response
         
     | 
| 
      
 37 
     | 
    
         
            +
                end
         
     | 
| 
      
 38 
     | 
    
         
            +
             
     | 
| 
      
 39 
     | 
    
         
            +
                def response_body
         
     | 
| 
      
 40 
     | 
    
         
            +
                  @response[:body] if @response
         
     | 
| 
      
 41 
     | 
    
         
            +
                end
         
     | 
| 
      
 42 
     | 
    
         
            +
             
     | 
| 
       31 
43 
     | 
    
         
             
                protected
         
     | 
| 
       32 
44 
     | 
    
         | 
| 
       33 
45 
     | 
    
         
             
                # Pulls out potential parent exception and response hash, storing them in
         
     | 
| 
         @@ -38,6 +50,14 @@ module Faraday 
     | 
|
| 
       38 
50 
     | 
    
         
             
                #              :headers - String key/value hash of HTTP response header
         
     | 
| 
       39 
51 
     | 
    
         
             
                #                         values.
         
     | 
| 
       40 
52 
     | 
    
         
             
                #              :body    - Optional string HTTP response body.
         
     | 
| 
      
 53 
     | 
    
         
            +
                #              :request - Hash
         
     | 
| 
      
 54 
     | 
    
         
            +
                #                           :method   - Symbol with the request HTTP method.
         
     | 
| 
      
 55 
     | 
    
         
            +
                #                           :url_path - String with the url path requested.
         
     | 
| 
      
 56 
     | 
    
         
            +
                #                           :params   - String key/value hash of query params
         
     | 
| 
      
 57 
     | 
    
         
            +
                #                                     present in the request.
         
     | 
| 
      
 58 
     | 
    
         
            +
                #                           :headers  - String key/value hash of HTTP request
         
     | 
| 
      
 59 
     | 
    
         
            +
                #                                     header values.
         
     | 
| 
      
 60 
     | 
    
         
            +
                #                           :body     - String HTTP request body.
         
     | 
| 
       41 
61 
     | 
    
         
             
                #
         
     | 
| 
       42 
62 
     | 
    
         
             
                # If a subclass has to call this, then it should pass a string message
         
     | 
| 
       43 
63 
     | 
    
         
             
                # to `super`. See NilStatusError.
         
     | 
    
        data/lib/faraday/middleware.rb
    CHANGED
    
    | 
         @@ -6,15 +6,25 @@ module Faraday 
     | 
|
| 
       6 
6 
     | 
    
         
             
                extend MiddlewareRegistry
         
     | 
| 
       7 
7 
     | 
    
         
             
                extend DependencyLoader
         
     | 
| 
       8 
8 
     | 
    
         | 
| 
       9 
     | 
    
         
            -
                 
     | 
| 
      
 9 
     | 
    
         
            +
                attr_reader :app, :options
         
     | 
| 
      
 10 
     | 
    
         
            +
             
     | 
| 
      
 11 
     | 
    
         
            +
                def initialize(app = nil, options = {})
         
     | 
| 
       10 
12 
     | 
    
         
             
                  @app = app
         
     | 
| 
      
 13 
     | 
    
         
            +
                  @options = options
         
     | 
| 
      
 14 
     | 
    
         
            +
                end
         
     | 
| 
      
 15 
     | 
    
         
            +
             
     | 
| 
      
 16 
     | 
    
         
            +
                def call(env)
         
     | 
| 
      
 17 
     | 
    
         
            +
                  on_request(env) if respond_to?(:on_request)
         
     | 
| 
      
 18 
     | 
    
         
            +
                  app.call(env).on_complete do |environment|
         
     | 
| 
      
 19 
     | 
    
         
            +
                    on_complete(environment) if respond_to?(:on_complete)
         
     | 
| 
      
 20 
     | 
    
         
            +
                  end
         
     | 
| 
       11 
21 
     | 
    
         
             
                end
         
     | 
| 
       12 
22 
     | 
    
         | 
| 
       13 
23 
     | 
    
         
             
                def close
         
     | 
| 
       14 
     | 
    
         
            -
                  if  
     | 
| 
       15 
     | 
    
         
            -
                     
     | 
| 
      
 24 
     | 
    
         
            +
                  if app.respond_to?(:close)
         
     | 
| 
      
 25 
     | 
    
         
            +
                    app.close
         
     | 
| 
       16 
26 
     | 
    
         
             
                  else
         
     | 
| 
       17 
     | 
    
         
            -
                    warn "#{ 
     | 
| 
      
 27 
     | 
    
         
            +
                    warn "#{app} does not implement \#close!"
         
     | 
| 
       18 
28 
     | 
    
         
             
                  end
         
     | 
| 
       19 
29 
     | 
    
         
             
                end
         
     | 
| 
       20 
30 
     | 
    
         
             
              end
         
     | 
    
        data/lib/faraday/options.rb
    CHANGED
    
    | 
         @@ -103,12 +103,10 @@ module Faraday 
     | 
|
| 
       103 
103 
     | 
    
         
             
                end
         
     | 
| 
       104 
104 
     | 
    
         | 
| 
       105 
105 
     | 
    
         
             
                # Public
         
     | 
| 
       106 
     | 
    
         
            -
                def each_key
         
     | 
| 
      
 106 
     | 
    
         
            +
                def each_key(&block)
         
     | 
| 
       107 
107 
     | 
    
         
             
                  return to_enum(:each_key) unless block_given?
         
     | 
| 
       108 
108 
     | 
    
         | 
| 
       109 
     | 
    
         
            -
                  keys.each 
     | 
| 
       110 
     | 
    
         
            -
                    yield(key)
         
     | 
| 
       111 
     | 
    
         
            -
                  end
         
     | 
| 
      
 109 
     | 
    
         
            +
                  keys.each(&block)
         
     | 
| 
       112 
110 
     | 
    
         
             
                end
         
     | 
| 
       113 
111 
     | 
    
         | 
| 
       114 
112 
     | 
    
         
             
                # Public
         
     | 
| 
         @@ -119,12 +117,10 @@ module Faraday 
     | 
|
| 
       119 
117 
     | 
    
         
             
                alias has_key? key?
         
     | 
| 
       120 
118 
     | 
    
         | 
| 
       121 
119 
     | 
    
         
             
                # Public
         
     | 
| 
       122 
     | 
    
         
            -
                def each_value
         
     | 
| 
      
 120 
     | 
    
         
            +
                def each_value(&block)
         
     | 
| 
       123 
121 
     | 
    
         
             
                  return to_enum(:each_value) unless block_given?
         
     | 
| 
       124 
122 
     | 
    
         | 
| 
       125 
     | 
    
         
            -
                  values.each 
     | 
| 
       126 
     | 
    
         
            -
                    yield(value)
         
     | 
| 
       127 
     | 
    
         
            -
                  end
         
     | 
| 
      
 123 
     | 
    
         
            +
                  values.each(&block)
         
     | 
| 
       128 
124 
     | 
    
         
             
                end
         
     | 
| 
       129 
125 
     | 
    
         | 
| 
       130 
126 
     | 
    
         
             
                # Public
         
     | 
    
        data/lib/faraday/rack_builder.rb
    CHANGED
    
    | 
         @@ -1,5 +1,6 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            # frozen_string_literal: true
         
     | 
| 
       2 
2 
     | 
    
         | 
| 
      
 3 
     | 
    
         
            +
            require 'ruby2_keywords'
         
     | 
| 
       3 
4 
     | 
    
         
             
            require 'faraday/adapter_registry'
         
     | 
| 
       4 
5 
     | 
    
         | 
| 
       5 
6 
     | 
    
         
             
            module Faraday
         
     | 
| 
         @@ -27,7 +28,7 @@ module Faraday 
     | 
|
| 
       27 
28 
     | 
    
         | 
| 
       28 
29 
     | 
    
         
             
                  attr_reader :name
         
     | 
| 
       29 
30 
     | 
    
         | 
| 
       30 
     | 
    
         
            -
                  def initialize(klass, *args, &block)
         
     | 
| 
      
 31 
     | 
    
         
            +
                  ruby2_keywords def initialize(klass, *args, &block)
         
     | 
| 
       31 
32 
     | 
    
         
             
                    @name = klass.to_s
         
     | 
| 
       32 
33 
     | 
    
         
             
                    REGISTRY.set(klass) if klass.respond_to?(:name)
         
     | 
| 
       33 
34 
     | 
    
         
             
                    @args = args
         
     | 
| 
         @@ -89,7 +90,7 @@ module Faraday 
     | 
|
| 
       89 
90 
     | 
    
         
             
                  @handlers.frozen?
         
     | 
| 
       90 
91 
     | 
    
         
             
                end
         
     | 
| 
       91 
92 
     | 
    
         | 
| 
       92 
     | 
    
         
            -
                def use(klass, *args, &block)
         
     | 
| 
      
 93 
     | 
    
         
            +
                ruby2_keywords def use(klass, *args, &block)
         
     | 
| 
       93 
94 
     | 
    
         
             
                  if klass.is_a? Symbol
         
     | 
| 
       94 
95 
     | 
    
         
             
                    use_symbol(Faraday::Middleware, klass, *args, &block)
         
     | 
| 
       95 
96 
     | 
    
         
             
                  else
         
     | 
| 
         @@ -99,15 +100,15 @@ module Faraday 
     | 
|
| 
       99 
100 
     | 
    
         
             
                  end
         
     | 
| 
       100 
101 
     | 
    
         
             
                end
         
     | 
| 
       101 
102 
     | 
    
         | 
| 
       102 
     | 
    
         
            -
                def request(key, *args, &block)
         
     | 
| 
      
 103 
     | 
    
         
            +
                ruby2_keywords def request(key, *args, &block)
         
     | 
| 
       103 
104 
     | 
    
         
             
                  use_symbol(Faraday::Request, key, *args, &block)
         
     | 
| 
       104 
105 
     | 
    
         
             
                end
         
     | 
| 
       105 
106 
     | 
    
         | 
| 
       106 
     | 
    
         
            -
                def response(key, *args, &block)
         
     | 
| 
      
 107 
     | 
    
         
            +
                ruby2_keywords def response(key, *args, &block)
         
     | 
| 
       107 
108 
     | 
    
         
             
                  use_symbol(Faraday::Response, key, *args, &block)
         
     | 
| 
       108 
109 
     | 
    
         
             
                end
         
     | 
| 
       109 
110 
     | 
    
         | 
| 
       110 
     | 
    
         
            -
                def adapter(klass = NO_ARGUMENT, *args, &block)
         
     | 
| 
      
 111 
     | 
    
         
            +
                ruby2_keywords def adapter(klass = NO_ARGUMENT, *args, &block)
         
     | 
| 
       111 
112 
     | 
    
         
             
                  return @adapter if klass == NO_ARGUMENT
         
     | 
| 
       112 
113 
     | 
    
         | 
| 
       113 
114 
     | 
    
         
             
                  klass = Faraday::Adapter.lookup_middleware(klass) if klass.is_a?(Symbol)
         
     | 
| 
         @@ -116,7 +117,7 @@ module Faraday 
     | 
|
| 
       116 
117 
     | 
    
         | 
| 
       117 
118 
     | 
    
         
             
                ## methods to push onto the various positions in the stack:
         
     | 
| 
       118 
119 
     | 
    
         | 
| 
       119 
     | 
    
         
            -
                def insert(index, *args, &block)
         
     | 
| 
      
 120 
     | 
    
         
            +
                ruby2_keywords def insert(index, *args, &block)
         
     | 
| 
       120 
121 
     | 
    
         
             
                  raise_if_locked
         
     | 
| 
       121 
122 
     | 
    
         
             
                  index = assert_index(index)
         
     | 
| 
       122 
123 
     | 
    
         
             
                  handler = self.class::Handler.new(*args, &block)
         
     | 
| 
         @@ -125,12 +126,12 @@ module Faraday 
     | 
|
| 
       125 
126 
     | 
    
         | 
| 
       126 
127 
     | 
    
         
             
                alias insert_before insert
         
     | 
| 
       127 
128 
     | 
    
         | 
| 
       128 
     | 
    
         
            -
                def insert_after(index, *args, &block)
         
     | 
| 
      
 129 
     | 
    
         
            +
                ruby2_keywords def insert_after(index, *args, &block)
         
     | 
| 
       129 
130 
     | 
    
         
             
                  index = assert_index(index)
         
     | 
| 
       130 
131 
     | 
    
         
             
                  insert(index + 1, *args, &block)
         
     | 
| 
       131 
132 
     | 
    
         
             
                end
         
     | 
| 
       132 
133 
     | 
    
         | 
| 
       133 
     | 
    
         
            -
                def swap(index, *args, &block)
         
     | 
| 
      
 134 
     | 
    
         
            +
                ruby2_keywords def swap(index, *args, &block)
         
     | 
| 
       134 
135 
     | 
    
         
             
                  raise_if_locked
         
     | 
| 
       135 
136 
     | 
    
         
             
                  index = assert_index(index)
         
     | 
| 
       136 
137 
     | 
    
         
             
                  @handlers.delete_at(index)
         
     | 
| 
         @@ -186,7 +187,7 @@ module Faraday 
     | 
|
| 
       186 
187 
     | 
    
         
             
                end
         
     | 
| 
       187 
188 
     | 
    
         | 
| 
       188 
189 
     | 
    
         
             
                # ENV Keys
         
     | 
| 
       189 
     | 
    
         
            -
                # : 
     | 
| 
      
 190 
     | 
    
         
            +
                # :http_method - a symbolized request HTTP method (:get, :post)
         
     | 
| 
       190 
191 
     | 
    
         
             
                # :body   - the request body that will eventually be converted to a string.
         
     | 
| 
       191 
192 
     | 
    
         
             
                # :url    - URI instance for the current request.
         
     | 
| 
       192 
193 
     | 
    
         
             
                # :status           - HTTP response status code
         
     | 
| 
         @@ -207,7 +208,7 @@ module Faraday 
     | 
|
| 
       207 
208 
     | 
    
         
             
                    request.options.params_encoder
         
     | 
| 
       208 
209 
     | 
    
         
             
                  )
         
     | 
| 
       209 
210 
     | 
    
         | 
| 
       210 
     | 
    
         
            -
                  Env.new(request. 
     | 
| 
      
 211 
     | 
    
         
            +
                  Env.new(request.http_method, request.body, exclusive_url,
         
     | 
| 
       211 
212 
     | 
    
         
             
                          request.options, request.headers, connection.ssl,
         
     | 
| 
       212 
213 
     | 
    
         
             
                          connection.parallel_manager)
         
     | 
| 
       213 
214 
     | 
    
         
             
                end
         
     | 
| 
         @@ -231,10 +232,10 @@ module Faraday 
     | 
|
| 
       231 
232 
     | 
    
         
             
                end
         
     | 
| 
       232 
233 
     | 
    
         | 
| 
       233 
234 
     | 
    
         
             
                def is_adapter?(klass) # rubocop:disable Naming/PredicateName
         
     | 
| 
       234 
     | 
    
         
            -
                  klass 
     | 
| 
      
 235 
     | 
    
         
            +
                  klass <= Faraday::Adapter
         
     | 
| 
       235 
236 
     | 
    
         
             
                end
         
     | 
| 
       236 
237 
     | 
    
         | 
| 
       237 
     | 
    
         
            -
                def use_symbol(mod, key, *args, &block)
         
     | 
| 
      
 238 
     | 
    
         
            +
                ruby2_keywords def use_symbol(mod, key, *args, &block)
         
     | 
| 
       238 
239 
     | 
    
         
             
                  use(mod.lookup_middleware(key), *args, &block)
         
     | 
| 
       239 
240 
     | 
    
         
             
                end
         
     | 
| 
       240 
241 
     | 
    
         | 
    
        data/lib/faraday/request.rb
    CHANGED
    
    | 
         @@ -12,7 +12,7 @@ module Faraday 
     | 
|
| 
       12 
12 
     | 
    
         
             
              #     req.body = 'abc'
         
     | 
| 
       13 
13 
     | 
    
         
             
              #   end
         
     | 
| 
       14 
14 
     | 
    
         
             
              #
         
     | 
| 
       15 
     | 
    
         
            -
              # @!attribute  
     | 
| 
      
 15 
     | 
    
         
            +
              # @!attribute http_method
         
     | 
| 
       16 
16 
     | 
    
         
             
              #   @return [Symbol] the HTTP method of the Request
         
     | 
| 
       17 
17 
     | 
    
         
             
              # @!attribute path
         
     | 
| 
       18 
18 
     | 
    
         
             
              #   @return [URI, String] the path
         
     | 
| 
         @@ -26,7 +26,9 @@ module Faraday 
     | 
|
| 
       26 
26 
     | 
    
         
             
              #   @return [RequestOptions] options
         
     | 
| 
       27 
27 
     | 
    
         
             
              #
         
     | 
| 
       28 
28 
     | 
    
         
             
              # rubocop:disable Style/StructInheritance
         
     | 
| 
       29 
     | 
    
         
            -
              class Request < Struct.new( 
     | 
| 
      
 29 
     | 
    
         
            +
              class Request < Struct.new(
         
     | 
| 
      
 30 
     | 
    
         
            +
                :http_method, :path, :params, :headers, :body, :options
         
     | 
| 
      
 31 
     | 
    
         
            +
              )
         
     | 
| 
       30 
32 
     | 
    
         
             
                # rubocop:enable Style/StructInheritance
         
     | 
| 
       31 
33 
     | 
    
         | 
| 
       32 
34 
     | 
    
         
             
                extend MiddlewareRegistry
         
     | 
| 
         @@ -56,6 +58,14 @@ module Faraday 
     | 
|
| 
       56 
58 
     | 
    
         
             
                  end
         
     | 
| 
       57 
59 
     | 
    
         
             
                end
         
     | 
| 
       58 
60 
     | 
    
         | 
| 
      
 61 
     | 
    
         
            +
                def method
         
     | 
| 
      
 62 
     | 
    
         
            +
                  warn <<~TEXT
         
     | 
| 
      
 63 
     | 
    
         
            +
                    WARNING: `Faraday::Request##{__method__}` is deprecated; use `#http_method` instead. It will be removed in or after version 2.0.
         
     | 
| 
      
 64 
     | 
    
         
            +
                    `Faraday::Request##{__method__}` called from #{caller_locations(1..1).first}
         
     | 
| 
      
 65 
     | 
    
         
            +
                  TEXT
         
     | 
| 
      
 66 
     | 
    
         
            +
                  http_method
         
     | 
| 
      
 67 
     | 
    
         
            +
                end
         
     | 
| 
      
 68 
     | 
    
         
            +
             
     | 
| 
       59 
69 
     | 
    
         
             
                # Replace params, preserving the existing hash type.
         
     | 
| 
       60 
70 
     | 
    
         
             
                #
         
     | 
| 
       61 
71 
     | 
    
         
             
                # @param hash [Hash] new params
         
     | 
| 
         @@ -116,7 +126,7 @@ module Faraday 
     | 
|
| 
       116 
126 
     | 
    
         
             
                # @return [Hash] the hash ready to be serialized in Marshal.
         
     | 
| 
       117 
127 
     | 
    
         
             
                def marshal_dump
         
     | 
| 
       118 
128 
     | 
    
         
             
                  {
         
     | 
| 
       119 
     | 
    
         
            -
                     
     | 
| 
      
 129 
     | 
    
         
            +
                    http_method: http_method,
         
     | 
| 
       120 
130 
     | 
    
         
             
                    body: body,
         
     | 
| 
       121 
131 
     | 
    
         
             
                    headers: headers,
         
     | 
| 
       122 
132 
     | 
    
         
             
                    path: path,
         
     | 
| 
         @@ -129,17 +139,17 @@ module Faraday 
     | 
|
| 
       129 
139 
     | 
    
         
             
                # Restores the instance variables according to the +serialised+.
         
     | 
| 
       130 
140 
     | 
    
         
             
                # @param serialised [Hash] the serialised object.
         
     | 
| 
       131 
141 
     | 
    
         
             
                def marshal_load(serialised)
         
     | 
| 
       132 
     | 
    
         
            -
                  self. 
     | 
| 
       133 
     | 
    
         
            -
                  self.body 
     | 
| 
       134 
     | 
    
         
            -
                  self.headers 
     | 
| 
       135 
     | 
    
         
            -
                  self.path 
     | 
| 
       136 
     | 
    
         
            -
                  self.params 
     | 
| 
       137 
     | 
    
         
            -
                  self.options 
     | 
| 
      
 142 
     | 
    
         
            +
                  self.http_method = serialised[:http_method]
         
     | 
| 
      
 143 
     | 
    
         
            +
                  self.body        = serialised[:body]
         
     | 
| 
      
 144 
     | 
    
         
            +
                  self.headers     = serialised[:headers]
         
     | 
| 
      
 145 
     | 
    
         
            +
                  self.path        = serialised[:path]
         
     | 
| 
      
 146 
     | 
    
         
            +
                  self.params      = serialised[:params]
         
     | 
| 
      
 147 
     | 
    
         
            +
                  self.options     = serialised[:options]
         
     | 
| 
       138 
148 
     | 
    
         
             
                end
         
     | 
| 
       139 
149 
     | 
    
         | 
| 
       140 
150 
     | 
    
         
             
                # @return [Env] the Env for this Request
         
     | 
| 
       141 
151 
     | 
    
         
             
                def to_env(connection)
         
     | 
| 
       142 
     | 
    
         
            -
                  Env.new( 
     | 
| 
      
 152 
     | 
    
         
            +
                  Env.new(http_method, body, connection.build_exclusive_url(path, params),
         
     | 
| 
       143 
153 
     | 
    
         
             
                          options, headers, connection.ssl, connection.parallel_manager)
         
     | 
| 
       144 
154 
     | 
    
         
             
                end
         
     | 
| 
       145 
155 
     | 
    
         
             
              end
         
     | 
| 
         @@ -12,6 +12,11 @@ module Faraday 
     | 
|
| 
       12 
12 
     | 
    
         
             
                    DEFAULT_BOUNDARY_PREFIX = '-----------RubyMultipartPost'
         
     | 
| 
       13 
13 
     | 
    
         
             
                  end
         
     | 
| 
       14 
14 
     | 
    
         | 
| 
      
 15 
     | 
    
         
            +
                  def initialize(app = nil, options = {})
         
     | 
| 
      
 16 
     | 
    
         
            +
                    super(app)
         
     | 
| 
      
 17 
     | 
    
         
            +
                    @options = options
         
     | 
| 
      
 18 
     | 
    
         
            +
                  end
         
     | 
| 
      
 19 
     | 
    
         
            +
             
     | 
| 
       15 
20 
     | 
    
         
             
                  # Checks for files in the payload, otherwise leaves everything untouched.
         
     | 
| 
       16 
21 
     | 
    
         
             
                  #
         
     | 
| 
       17 
22 
     | 
    
         
             
                  # @param env [Faraday::Env]
         
     | 
| 
         @@ -30,7 +35,7 @@ module Faraday 
     | 
|
| 
       30 
35 
     | 
    
         
             
                    type = request_type(env)
         
     | 
| 
       31 
36 
     | 
    
         
             
                    env.body.respond_to?(:each_key) && !env.body.empty? && (
         
     | 
| 
       32 
37 
     | 
    
         
             
                      (type.empty? && has_multipart?(env.body)) ||
         
     | 
| 
       33 
     | 
    
         
            -
             
     | 
| 
      
 38 
     | 
    
         
            +
                        (type == self.class.mime_type)
         
     | 
| 
       34 
39 
     | 
    
         
             
                    )
         
     | 
| 
       35 
40 
     | 
    
         
             
                  end
         
     | 
| 
       36 
41 
     | 
    
         | 
| 
         @@ -79,7 +84,9 @@ module Faraday 
     | 
|
| 
       79 
84 
     | 
    
         
             
                  # @param pieces [Array]
         
     | 
| 
       80 
85 
     | 
    
         
             
                  def process_params(params, prefix = nil, pieces = nil, &block)
         
     | 
| 
       81 
86 
     | 
    
         
             
                    params.inject(pieces || []) do |all, (key, value)|
         
     | 
| 
       82 
     | 
    
         
            -
                       
     | 
| 
      
 87 
     | 
    
         
            +
                      if prefix
         
     | 
| 
      
 88 
     | 
    
         
            +
                        key = @options[:flat_encode] ? prefix.to_s : "#{prefix}[#{key}]"
         
     | 
| 
      
 89 
     | 
    
         
            +
                      end
         
     | 
| 
       83 
90 
     | 
    
         | 
| 
       84 
91 
     | 
    
         
             
                      case value
         
     | 
| 
       85 
92 
     | 
    
         
             
                      when Array
         
     | 
| 
         @@ -21,7 +21,7 @@ module Faraday 
     | 
|
| 
       21 
21 
     | 
    
         
             
                #   end
         
     | 
| 
       22 
22 
     | 
    
         
             
                #
         
     | 
| 
       23 
23 
     | 
    
         
             
                # This example will result in a first interval that is random between 0.05
         
     | 
| 
       24 
     | 
    
         
            -
                # and 0.075 and a second interval that is random between 0.1 and 0. 
     | 
| 
      
 24 
     | 
    
         
            +
                # and 0.075 and a second interval that is random between 0.1 and 0.125.
         
     | 
| 
       25 
25 
     | 
    
         
             
                class Retry < Faraday::Middleware
         
     | 
| 
       26 
26 
     | 
    
         
             
                  DEFAULT_EXCEPTIONS = [
         
     | 
| 
       27 
27 
     | 
    
         
             
                    Errno::ETIMEDOUT, 'Timeout::Error',
         
     | 
| 
         @@ -112,7 +112,7 @@ module Faraday 
     | 
|
| 
       112 
112 
     | 
    
         
             
                  #   not independent of the retry count. This would be useful
         
     | 
| 
       113 
113 
     | 
    
         
             
                  #   if the exception produced is non-recoverable or if the
         
     | 
| 
       114 
114 
     | 
    
         
             
                  #   the HTTP method called is not idempotent.
         
     | 
| 
       115 
     | 
    
         
            -
                  # @option options [Block] :retry_block block that is executed  
     | 
| 
      
 115 
     | 
    
         
            +
                  # @option options [Block] :retry_block block that is executed before
         
     | 
| 
       116 
116 
     | 
    
         
             
                  #   every retry. Request environment, middleware options, current number
         
     | 
| 
       117 
117 
     | 
    
         
             
                  #   of retries and the exception is passed to the block as parameters.
         
     | 
| 
       118 
118 
     | 
    
         
             
                  # @option options [Array] :retry_statuses Array of Integer HTTP status
         
     | 
    
        data/lib/faraday/response.rb
    CHANGED
    
    | 
         @@ -7,12 +7,6 @@ module Faraday 
     | 
|
| 
       7 
7 
     | 
    
         
             
              class Response
         
     | 
| 
       8 
8 
     | 
    
         
             
                # Used for simple response middleware.
         
     | 
| 
       9 
9 
     | 
    
         
             
                class Middleware < Faraday::Middleware
         
     | 
| 
       10 
     | 
    
         
            -
                  def call(env)
         
     | 
| 
       11 
     | 
    
         
            -
                    @app.call(env).on_complete do |environment|
         
     | 
| 
       12 
     | 
    
         
            -
                      on_complete(environment)
         
     | 
| 
       13 
     | 
    
         
            -
                    end
         
     | 
| 
       14 
     | 
    
         
            -
                  end
         
     | 
| 
       15 
     | 
    
         
            -
             
     | 
| 
       16 
10 
     | 
    
         
             
                  # Override this to modify the environment after the response has finished.
         
     | 
| 
       17 
11 
     | 
    
         
             
                  # Calls the `parse` method if defined
         
     | 
| 
       18 
12 
     | 
    
         
             
                  # `parse` method can be defined as private, public and protected
         
     | 
| 
         @@ -38,7 +38,18 @@ module Faraday 
     | 
|
| 
       38 
38 
     | 
    
         
             
                  end
         
     | 
| 
       39 
39 
     | 
    
         | 
| 
       40 
40 
     | 
    
         
             
                  def response_values(env)
         
     | 
| 
       41 
     | 
    
         
            -
                    { 
     | 
| 
      
 41 
     | 
    
         
            +
                    {
         
     | 
| 
      
 42 
     | 
    
         
            +
                      status: env.status,
         
     | 
| 
      
 43 
     | 
    
         
            +
                      headers: env.response_headers,
         
     | 
| 
      
 44 
     | 
    
         
            +
                      body: env.body,
         
     | 
| 
      
 45 
     | 
    
         
            +
                      request: {
         
     | 
| 
      
 46 
     | 
    
         
            +
                        method: env.method,
         
     | 
| 
      
 47 
     | 
    
         
            +
                        url_path: env.url.path,
         
     | 
| 
      
 48 
     | 
    
         
            +
                        params: env.params,
         
     | 
| 
      
 49 
     | 
    
         
            +
                        headers: env.request_headers,
         
     | 
| 
      
 50 
     | 
    
         
            +
                        body: env.request_body
         
     | 
| 
      
 51 
     | 
    
         
            +
                      }
         
     | 
| 
      
 52 
     | 
    
         
            +
                    }
         
     | 
| 
       42 
53 
     | 
    
         
             
                  end
         
     | 
| 
       43 
54 
     | 
    
         
             
                end
         
     | 
| 
       44 
55 
     | 
    
         
             
              end
         
     | 
    
        data/lib/faraday/utils.rb
    CHANGED
    
    | 
         @@ -28,7 +28,7 @@ module Faraday 
     | 
|
| 
       28 
28 
     | 
    
         | 
| 
       29 
29 
     | 
    
         
             
                def escape(str)
         
     | 
| 
       30 
30 
     | 
    
         
             
                  str.to_s.gsub(ESCAPE_RE) do |match|
         
     | 
| 
       31 
     | 
    
         
            -
                     
     | 
| 
      
 31 
     | 
    
         
            +
                    "%#{match.unpack('H2' * match.bytesize).join('%').upcase}"
         
     | 
| 
       32 
32 
     | 
    
         
             
                  end.gsub(' ', default_space_encoding)
         
     | 
| 
       33 
33 
     | 
    
         
             
                end
         
     | 
| 
       34 
34 
     | 
    
         | 
| 
         @@ -89,7 +89,7 @@ module Faraday 
     | 
|
| 
       89 
89 
     | 
    
         
             
                # the path with the query string sorted.
         
     | 
| 
       90 
90 
     | 
    
         
             
                def normalize_path(url)
         
     | 
| 
       91 
91 
     | 
    
         
             
                  url = URI(url)
         
     | 
| 
       92 
     | 
    
         
            -
                  (url.path.start_with?('/') ? url.path :  
     | 
| 
      
 92 
     | 
    
         
            +
                  (url.path.start_with?('/') ? url.path : "/#{url.path}") +
         
     | 
| 
       93 
93 
     | 
    
         
             
                    (url.query ? "?#{sort_query_params(url.query)}" : '')
         
     | 
| 
       94 
94 
     | 
    
         
             
                end
         
     | 
| 
       95 
95 
     | 
    
         | 
| 
         @@ -105,7 +105,7 @@ module Faraday 
     | 
|
| 
       105 
105 
     | 
    
         
             
                  end
         
     | 
| 
       106 
106 
     | 
    
         | 
| 
       107 
107 
     | 
    
         
             
                  def to_hash
         
     | 
| 
       108 
     | 
    
         
            -
                     
     | 
| 
      
 108 
     | 
    
         
            +
                    {}.update(self)
         
     | 
| 
       109 
109 
     | 
    
         
             
                  end
         
     | 
| 
       110 
110 
     | 
    
         | 
| 
       111 
111 
     | 
    
         
             
                  def parse(header_string)
         
     | 
| 
         @@ -114,7 +114,7 @@ module Faraday 
     | 
|
| 
       114 
114 
     | 
    
         
             
                    headers = header_string.split(/\r\n/)
         
     | 
| 
       115 
115 
     | 
    
         | 
| 
       116 
116 
     | 
    
         
             
                    # Find the last set of response headers.
         
     | 
| 
       117 
     | 
    
         
            -
                    start_index = headers.rindex { |x| x. 
     | 
| 
      
 117 
     | 
    
         
            +
                    start_index = headers.rindex { |x| x.start_with?('HTTP/') } || 0
         
     | 
| 
       118 
118 
     | 
    
         
             
                    last_response = headers.slice(start_index, headers.size)
         
     | 
| 
       119 
119 
     | 
    
         | 
| 
       120 
120 
     | 
    
         
             
                    last_response
         
     |