faraday 2.11.0 → 2.12.2
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/lib/faraday/logging/formatter.rb +6 -6
- data/lib/faraday/rack_builder.rb +15 -15
- data/lib/faraday/response/raise_error.rb +15 -17
- data/lib/faraday/version.rb +1 -1
- data/spec/faraday/error_spec.rb +10 -2
- data/spec/faraday/response/logger_spec.rb +20 -0
- data/spec/faraday/response/raise_error_spec.rb +20 -0
- metadata +24 -10
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA256:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: bfb424c45e703a33fd819b31c8ee41c9e4e30874b280530a19ce8ae320570ef9
         | 
| 4 | 
            +
              data.tar.gz: c1a1a5b7aab4f393908958701959f7b41fd303ca4da906c1b4c0581a13c590db
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: 6d4d18e2006ac83dfd22aff834b4fe3c983bfbf578b6850944d35cfbb1ca40ba58ce07414821bc3e604ca3310c85500d5d2b8de7c33b0e6147f24484fcae688f
         | 
| 7 | 
            +
              data.tar.gz: 9cc8057d003f09a02bbdb9a29b920003beff58391c3bf86838ae61b2e9aaac4782d5764286f824b24d486e8dee202cc2d892ec3f658db6b710d5088d5836be3c
         | 
| @@ -23,8 +23,8 @@ module Faraday | |
| 23 23 | 
             
                  def_delegators :@logger, :debug, :info, :warn, :error, :fatal
         | 
| 24 24 |  | 
| 25 25 | 
             
                  def request(env)
         | 
| 26 | 
            -
                    public_send(log_level | 
| 27 | 
            -
                      "#{env.method.upcase} #{apply_filters(env.url.to_s)}"
         | 
| 26 | 
            +
                    public_send(log_level) do
         | 
| 27 | 
            +
                      "request: #{env.method.upcase} #{apply_filters(env.url.to_s)}"
         | 
| 28 28 | 
             
                    end
         | 
| 29 29 |  | 
| 30 30 | 
             
                    log_headers('request', env.request_headers) if log_headers?(:request)
         | 
| @@ -32,7 +32,7 @@ module Faraday | |
| 32 32 | 
             
                  end
         | 
| 33 33 |  | 
| 34 34 | 
             
                  def response(env)
         | 
| 35 | 
            -
                    public_send(log_level | 
| 35 | 
            +
                    public_send(log_level) { "response: Status #{env.status}" }
         | 
| 36 36 |  | 
| 37 37 | 
             
                    log_headers('response', env.response_headers) if log_headers?(:response)
         | 
| 38 38 | 
             
                    log_body('response', env[:body]) if env[:body] && log_body?(:response)
         | 
| @@ -41,7 +41,7 @@ module Faraday | |
| 41 41 | 
             
                  def exception(exc)
         | 
| 42 42 | 
             
                    return unless log_errors?
         | 
| 43 43 |  | 
| 44 | 
            -
                    public_send(log_level | 
| 44 | 
            +
                    public_send(log_level) { "error: #{exc.full_message}" }
         | 
| 45 45 |  | 
| 46 46 | 
             
                    log_headers('error', exc.response_headers) if exc.respond_to?(:response_headers) && log_headers?(:error)
         | 
| 47 47 | 
             
                    return unless exc.respond_to?(:response_body) && exc.response_body && log_body?(:error)
         | 
| @@ -107,11 +107,11 @@ module Faraday | |
| 107 107 | 
             
                  end
         | 
| 108 108 |  | 
| 109 109 | 
             
                  def log_headers(type, headers)
         | 
| 110 | 
            -
                    public_send(log_level | 
| 110 | 
            +
                    public_send(log_level) { "#{type}: #{apply_filters(dump_headers(headers))}" }
         | 
| 111 111 | 
             
                  end
         | 
| 112 112 |  | 
| 113 113 | 
             
                  def log_body(type, body)
         | 
| 114 | 
            -
                    public_send(log_level | 
| 114 | 
            +
                    public_send(log_level) { "#{type}: #{apply_filters(dump_body(body))}" }
         | 
| 115 115 | 
             
                  end
         | 
| 116 116 | 
             
                end
         | 
| 117 117 | 
             
              end
         | 
    
        data/lib/faraday/rack_builder.rb
    CHANGED
    
    | @@ -88,22 +88,22 @@ module Faraday | |
| 88 88 | 
             
                  @handlers.frozen?
         | 
| 89 89 | 
             
                end
         | 
| 90 90 |  | 
| 91 | 
            -
                 | 
| 91 | 
            +
                def use(klass, ...)
         | 
| 92 92 | 
             
                  if klass.is_a? Symbol
         | 
| 93 | 
            -
                    use_symbol(Faraday::Middleware, klass,  | 
| 93 | 
            +
                    use_symbol(Faraday::Middleware, klass, ...)
         | 
| 94 94 | 
             
                  else
         | 
| 95 95 | 
             
                    raise_if_locked
         | 
| 96 96 | 
             
                    raise_if_adapter(klass)
         | 
| 97 | 
            -
                    @handlers << self.class::Handler.new(klass,  | 
| 97 | 
            +
                    @handlers << self.class::Handler.new(klass, ...)
         | 
| 98 98 | 
             
                  end
         | 
| 99 99 | 
             
                end
         | 
| 100 100 |  | 
| 101 | 
            -
                 | 
| 102 | 
            -
                  use_symbol(Faraday::Request, key,  | 
| 101 | 
            +
                def request(key, ...)
         | 
| 102 | 
            +
                  use_symbol(Faraday::Request, key, ...)
         | 
| 103 103 | 
             
                end
         | 
| 104 104 |  | 
| 105 | 
            -
                 | 
| 106 | 
            -
                  use_symbol(Faraday::Response,  | 
| 105 | 
            +
                def response(...)
         | 
| 106 | 
            +
                  use_symbol(Faraday::Response, ...)
         | 
| 107 107 | 
             
                end
         | 
| 108 108 |  | 
| 109 109 | 
             
                ruby2_keywords def adapter(klass = NO_ARGUMENT, *args, &block)
         | 
| @@ -115,25 +115,25 @@ module Faraday | |
| 115 115 |  | 
| 116 116 | 
             
                ## methods to push onto the various positions in the stack:
         | 
| 117 117 |  | 
| 118 | 
            -
                 | 
| 118 | 
            +
                def insert(index, ...)
         | 
| 119 119 | 
             
                  raise_if_locked
         | 
| 120 120 | 
             
                  index = assert_index(index)
         | 
| 121 | 
            -
                  handler = self.class::Handler.new( | 
| 121 | 
            +
                  handler = self.class::Handler.new(...)
         | 
| 122 122 | 
             
                  @handlers.insert(index, handler)
         | 
| 123 123 | 
             
                end
         | 
| 124 124 |  | 
| 125 125 | 
             
                alias insert_before insert
         | 
| 126 126 |  | 
| 127 | 
            -
                 | 
| 127 | 
            +
                def insert_after(index, ...)
         | 
| 128 128 | 
             
                  index = assert_index(index)
         | 
| 129 | 
            -
                  insert(index + 1,  | 
| 129 | 
            +
                  insert(index + 1, ...)
         | 
| 130 130 | 
             
                end
         | 
| 131 131 |  | 
| 132 | 
            -
                 | 
| 132 | 
            +
                def swap(index, ...)
         | 
| 133 133 | 
             
                  raise_if_locked
         | 
| 134 134 | 
             
                  index = assert_index(index)
         | 
| 135 135 | 
             
                  @handlers.delete_at(index)
         | 
| 136 | 
            -
                  insert(index,  | 
| 136 | 
            +
                  insert(index, ...)
         | 
| 137 137 | 
             
                end
         | 
| 138 138 |  | 
| 139 139 | 
             
                def delete(handler)
         | 
| @@ -237,8 +237,8 @@ module Faraday | |
| 237 237 | 
             
                  klass <= Faraday::Adapter
         | 
| 238 238 | 
             
                end
         | 
| 239 239 |  | 
| 240 | 
            -
                 | 
| 241 | 
            -
                  use(mod.lookup_middleware(key),  | 
| 240 | 
            +
                def use_symbol(mod, key, ...)
         | 
| 241 | 
            +
                  use(mod.lookup_middleware(key), ...)
         | 
| 242 242 | 
             
                end
         | 
| 243 243 |  | 
| 244 244 | 
             
                def assert_index(index)
         | 
| @@ -8,32 +8,30 @@ module Faraday | |
| 8 8 | 
             
                  # rubocop:disable Naming/ConstantName
         | 
| 9 9 | 
             
                  ClientErrorStatuses = (400...500)
         | 
| 10 10 | 
             
                  ServerErrorStatuses = (500...600)
         | 
| 11 | 
            +
                  ClientErrorStatusesWithCustomExceptions = {
         | 
| 12 | 
            +
                    400 => Faraday::BadRequestError,
         | 
| 13 | 
            +
                    401 => Faraday::UnauthorizedError,
         | 
| 14 | 
            +
                    403 => Faraday::ForbiddenError,
         | 
| 15 | 
            +
                    404 => Faraday::ResourceNotFound,
         | 
| 16 | 
            +
                    408 => Faraday::RequestTimeoutError,
         | 
| 17 | 
            +
                    409 => Faraday::ConflictError,
         | 
| 18 | 
            +
                    422 => Faraday::UnprocessableEntityError,
         | 
| 19 | 
            +
                    429 => Faraday::TooManyRequestsError
         | 
| 20 | 
            +
                  }.freeze
         | 
| 11 21 | 
             
                  # rubocop:enable Naming/ConstantName
         | 
| 12 22 |  | 
| 13 | 
            -
                  DEFAULT_OPTIONS = { include_request: true }.freeze
         | 
| 23 | 
            +
                  DEFAULT_OPTIONS = { include_request: true, allowed_statuses: [] }.freeze
         | 
| 14 24 |  | 
| 15 25 | 
             
                  def on_complete(env)
         | 
| 26 | 
            +
                    return if Array(options[:allowed_statuses]).include?(env[:status])
         | 
| 27 | 
            +
             | 
| 16 28 | 
             
                    case env[:status]
         | 
| 17 | 
            -
                    when  | 
| 18 | 
            -
                      raise  | 
| 19 | 
            -
                    when 401
         | 
| 20 | 
            -
                      raise Faraday::UnauthorizedError, response_values(env)
         | 
| 21 | 
            -
                    when 403
         | 
| 22 | 
            -
                      raise Faraday::ForbiddenError, response_values(env)
         | 
| 23 | 
            -
                    when 404
         | 
| 24 | 
            -
                      raise Faraday::ResourceNotFound, response_values(env)
         | 
| 29 | 
            +
                    when *ClientErrorStatusesWithCustomExceptions.keys
         | 
| 30 | 
            +
                      raise ClientErrorStatusesWithCustomExceptions[env[:status]], response_values(env)
         | 
| 25 31 | 
             
                    when 407
         | 
| 26 32 | 
             
                      # mimic the behavior that we get with proxy requests with HTTPS
         | 
| 27 33 | 
             
                      msg = %(407 "Proxy Authentication Required")
         | 
| 28 34 | 
             
                      raise Faraday::ProxyAuthError.new(msg, response_values(env))
         | 
| 29 | 
            -
                    when 408
         | 
| 30 | 
            -
                      raise Faraday::RequestTimeoutError, response_values(env)
         | 
| 31 | 
            -
                    when 409
         | 
| 32 | 
            -
                      raise Faraday::ConflictError, response_values(env)
         | 
| 33 | 
            -
                    when 422
         | 
| 34 | 
            -
                      raise Faraday::UnprocessableEntityError, response_values(env)
         | 
| 35 | 
            -
                    when 429
         | 
| 36 | 
            -
                      raise Faraday::TooManyRequestsError, response_values(env)
         | 
| 37 35 | 
             
                    when ClientErrorStatuses
         | 
| 38 36 | 
             
                      raise Faraday::ClientError, response_values(env)
         | 
| 39 37 | 
             
                    when ServerErrorStatuses
         | 
    
        data/lib/faraday/version.rb
    CHANGED
    
    
    
        data/spec/faraday/error_spec.rb
    CHANGED
    
    | @@ -24,7 +24,11 @@ RSpec.describe Faraday::Error do | |
| 24 24 | 
             
                  it { expect(subject.wrapped_exception).to be_nil }
         | 
| 25 25 | 
             
                  it { expect(subject.response).to eq(exception) }
         | 
| 26 26 | 
             
                  it { expect(subject.message).to eq('the server responded with status 400') }
         | 
| 27 | 
            -
                   | 
| 27 | 
            +
                  if RUBY_VERSION >= '3.4'
         | 
| 28 | 
            +
                    it { expect(subject.inspect).to eq('#<Faraday::Error response={status: 400}>') }
         | 
| 29 | 
            +
                  else
         | 
| 30 | 
            +
                    it { expect(subject.inspect).to eq('#<Faraday::Error response={:status=>400}>') }
         | 
| 31 | 
            +
                  end
         | 
| 28 32 | 
             
                  it { expect(subject.response_status).to eq(400) }
         | 
| 29 33 | 
             
                  it { expect(subject.response_headers).to be_nil }
         | 
| 30 34 | 
             
                  it { expect(subject.response_body).to be_nil }
         | 
| @@ -61,7 +65,11 @@ RSpec.describe Faraday::Error do | |
| 61 65 | 
             
                  it { expect(subject.wrapped_exception).to be_nil }
         | 
| 62 66 | 
             
                  it { expect(subject.response).to eq(response) }
         | 
| 63 67 | 
             
                  it { expect(subject.message).to eq('custom message') }
         | 
| 64 | 
            -
                   | 
| 68 | 
            +
                  if RUBY_VERSION >= '3.4'
         | 
| 69 | 
            +
                    it { expect(subject.inspect).to eq('#<Faraday::Error response={status: 400}>') }
         | 
| 70 | 
            +
                  else
         | 
| 71 | 
            +
                    it { expect(subject.inspect).to eq('#<Faraday::Error response={:status=>400}>') }
         | 
| 72 | 
            +
                  end
         | 
| 65 73 | 
             
                  it { expect(subject.response_status).to eq(400) }
         | 
| 66 74 | 
             
                  it { expect(subject.response_headers).to be_nil }
         | 
| 67 75 | 
             
                  it { expect(subject.response_body).to be_nil }
         | 
| @@ -55,6 +55,26 @@ RSpec.describe Faraday::Response::Logger do | |
| 55 55 | 
             
                end
         | 
| 56 56 | 
             
              end
         | 
| 57 57 |  | 
| 58 | 
            +
              context 'when logger with program name' do
         | 
| 59 | 
            +
                let(:logger) { Logger.new(string_io, progname: 'my_best_program') }
         | 
| 60 | 
            +
             | 
| 61 | 
            +
                it 'logs with program name' do
         | 
| 62 | 
            +
                  conn.get '/hello'
         | 
| 63 | 
            +
             | 
| 64 | 
            +
                  expect(string_io.string).to match('-- my_best_program: request:')
         | 
| 65 | 
            +
                  expect(string_io.string).to match('-- my_best_program: response:')
         | 
| 66 | 
            +
                end
         | 
| 67 | 
            +
              end
         | 
| 68 | 
            +
             | 
| 69 | 
            +
              context 'when logger without program name' do
         | 
| 70 | 
            +
                it 'logs without program name' do
         | 
| 71 | 
            +
                  conn.get '/hello'
         | 
| 72 | 
            +
             | 
| 73 | 
            +
                  expect(string_io.string).to match('-- : request:')
         | 
| 74 | 
            +
                  expect(string_io.string).to match('-- : response:')
         | 
| 75 | 
            +
                end
         | 
| 76 | 
            +
              end
         | 
| 77 | 
            +
             | 
| 58 78 | 
             
              context 'with default formatter' do
         | 
| 59 79 | 
             
                let(:formatter) { instance_double(Faraday::Logging::Formatter, request: true, response: true, filter: []) }
         | 
| 60 80 |  | 
| @@ -252,4 +252,24 @@ RSpec.describe Faraday::Response::RaiseError do | |
| 252 252 | 
             
                  end
         | 
| 253 253 | 
             
                end
         | 
| 254 254 | 
             
              end
         | 
| 255 | 
            +
             | 
| 256 | 
            +
              describe 'allowing certain status codes' do
         | 
| 257 | 
            +
                let(:conn) do
         | 
| 258 | 
            +
                  Faraday.new do |b|
         | 
| 259 | 
            +
                    b.response :raise_error, allowed_statuses: [404]
         | 
| 260 | 
            +
                    b.adapter :test do |stub|
         | 
| 261 | 
            +
                      stub.get('bad-request') { [400, { 'X-Reason' => 'because' }, 'keep looking'] }
         | 
| 262 | 
            +
                      stub.get('not-found') { [404, { 'X-Reason' => 'because' }, 'keep looking'] }
         | 
| 263 | 
            +
                    end
         | 
| 264 | 
            +
                  end
         | 
| 265 | 
            +
                end
         | 
| 266 | 
            +
             | 
| 267 | 
            +
                it 'raises an error for status codes that are not explicitly allowed' do
         | 
| 268 | 
            +
                  expect { conn.get('bad-request') }.to raise_error(Faraday::BadRequestError)
         | 
| 269 | 
            +
                end
         | 
| 270 | 
            +
             | 
| 271 | 
            +
                it 'does not raise an error for allowed status codes' do
         | 
| 272 | 
            +
                  expect { conn.get('not-found') }.not_to raise_error
         | 
| 273 | 
            +
                end
         | 
| 274 | 
            +
              end
         | 
| 255 275 | 
             
            end
         | 
    
        metadata
    CHANGED
    
    | @@ -1,16 +1,16 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: faraday
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 2. | 
| 4 | 
            +
              version: 2.12.2
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - "@technoweenie"
         | 
| 8 8 | 
             
            - "@iMacTia"
         | 
| 9 9 | 
             
            - "@olleolleolle"
         | 
| 10 | 
            -
            autorequire: | 
| 10 | 
            +
            autorequire:
         | 
| 11 11 | 
             
            bindir: bin
         | 
| 12 12 | 
             
            cert_chain: []
         | 
| 13 | 
            -
            date: 2024- | 
| 13 | 
            +
            date: 2024-12-09 00:00:00.000000000 Z
         | 
| 14 14 | 
             
            dependencies:
         | 
| 15 15 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 16 16 | 
             
              name: faraday-net_http
         | 
| @@ -21,7 +21,7 @@ dependencies: | |
| 21 21 | 
             
                    version: '2.0'
         | 
| 22 22 | 
             
                - - "<"
         | 
| 23 23 | 
             
                  - !ruby/object:Gem::Version
         | 
| 24 | 
            -
                    version: '3. | 
| 24 | 
            +
                    version: '3.5'
         | 
| 25 25 | 
             
              type: :runtime
         | 
| 26 26 | 
             
              prerelease: false
         | 
| 27 27 | 
             
              version_requirements: !ruby/object:Gem::Requirement
         | 
| @@ -31,7 +31,21 @@ dependencies: | |
| 31 31 | 
             
                    version: '2.0'
         | 
| 32 32 | 
             
                - - "<"
         | 
| 33 33 | 
             
                  - !ruby/object:Gem::Version
         | 
| 34 | 
            -
                    version: '3. | 
| 34 | 
            +
                    version: '3.5'
         | 
| 35 | 
            +
            - !ruby/object:Gem::Dependency
         | 
| 36 | 
            +
              name: json
         | 
| 37 | 
            +
              requirement: !ruby/object:Gem::Requirement
         | 
| 38 | 
            +
                requirements:
         | 
| 39 | 
            +
                - - ">="
         | 
| 40 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 41 | 
            +
                    version: '0'
         | 
| 42 | 
            +
              type: :runtime
         | 
| 43 | 
            +
              prerelease: false
         | 
| 44 | 
            +
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 45 | 
            +
                requirements:
         | 
| 46 | 
            +
                - - ">="
         | 
| 47 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 48 | 
            +
                    version: '0'
         | 
| 35 49 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 36 50 | 
             
              name: logger
         | 
| 37 51 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| @@ -46,7 +60,7 @@ dependencies: | |
| 46 60 | 
             
                - - ">="
         | 
| 47 61 | 
             
                  - !ruby/object:Gem::Version
         | 
| 48 62 | 
             
                    version: '0'
         | 
| 49 | 
            -
            description: | 
| 63 | 
            +
            description:
         | 
| 50 64 | 
             
            email: technoweenie@gmail.com
         | 
| 51 65 | 
             
            executables: []
         | 
| 52 66 | 
             
            extensions: []
         | 
| @@ -132,11 +146,11 @@ licenses: | |
| 132 146 | 
             
            - MIT
         | 
| 133 147 | 
             
            metadata:
         | 
| 134 148 | 
             
              homepage_uri: https://lostisland.github.io/faraday
         | 
| 135 | 
            -
              changelog_uri: https://github.com/lostisland/faraday/releases/tag/v2. | 
| 149 | 
            +
              changelog_uri: https://github.com/lostisland/faraday/releases/tag/v2.12.2
         | 
| 136 150 | 
             
              source_code_uri: https://github.com/lostisland/faraday
         | 
| 137 151 | 
             
              bug_tracker_uri: https://github.com/lostisland/faraday/issues
         | 
| 138 152 | 
             
              rubygems_mfa_required: 'true'
         | 
| 139 | 
            -
            post_install_message: | 
| 153 | 
            +
            post_install_message:
         | 
| 140 154 | 
             
            rdoc_options: []
         | 
| 141 155 | 
             
            require_paths:
         | 
| 142 156 | 
             
            - lib
         | 
| @@ -152,8 +166,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement | |
| 152 166 | 
             
                - !ruby/object:Gem::Version
         | 
| 153 167 | 
             
                  version: '0'
         | 
| 154 168 | 
             
            requirements: []
         | 
| 155 | 
            -
            rubygems_version: 3.5. | 
| 156 | 
            -
            signing_key: | 
| 169 | 
            +
            rubygems_version: 3.5.22
         | 
| 170 | 
            +
            signing_key:
         | 
| 157 171 | 
             
            specification_version: 4
         | 
| 158 172 | 
             
            summary: HTTP/REST API client library.
         | 
| 159 173 | 
             
            test_files: []
         |