class Faraday::Conductivity::SelectiveErrors
Use this to raise errors on certain HTTP statuses. These are basically the same errors as Faraday
raises when you use the “raise_error” middleware, but with added fields to better inspect what went wrong.
Examples:
# specify an array faraday.response :selective_errors, on: [422,500] # or a range: faraday.response :selective_errors, on: 500...600 # specify errors: faraday.response :selective_errors, except: [404,422]
Rescueing the errors:
begin do_request rescue Faraday::Conductivity::Error => error puts error.request[:url] puts error.request[:method] puts error.request[:body] puts error.request[:headers] puts error.response[:status] puts error.response[:body] puts error.response[:headers] end
Constants
- ClientErrorStatuses
- ServerErrorStatuses
Public Class Methods
new(app, options = {})
click to toggle source
# File lib/faraday/conductivity/selective_errors.rb, line 60 def initialize(app, options = {}) @app = app @on = options.fetch(:on) { ClientErrorStatuses.to_a + ServerErrorStatuses.to_a } @except = options.fetch(:except) { [] } end
Public Instance Methods
call(env)
click to toggle source
# File lib/faraday/conductivity/selective_errors.rb, line 66 def call(env) # capture request because it will be modified during the request request = { :method => env[:method], :url => env[:url], :body => env[:body], :headers => env[:request_headers], } start_time = Time.now @app.call(env).on_complete do status = env[:status] if should_raise_error?(status) error = case status when 400 Faraday::BadRequestError.new(response_values(env)) when 401 Faraday::UnauthorizedError.new(response_values(env)) when 403 Faraday::ForbiddenError.new(response_values(env)) when 404 Faraday::ResourceNotFound.new(response_values(env)) when 407 # mimic the behavior that we get with proxy requests with HTTPS msg = %(407 "Proxy Authentication Required") Faraday::ProxyAuthError.new(msg, response_values(env)) when 409 Faraday::ConflictError.new(response_values(env)) when 422 Faraday::UnprocessableEntityError.new(response_values(env)) when ClientErrorStatuses Faraday::ClientError.new(response_values(env)) when ServerErrorStatuses Faraday::ServerError.new(response_values(env)) when nil Faraday::NilStatusError.new(response_values(env)) end error.extend Error error.response = response_values(env) error.request = request error.response_time = Time.now - start_time raise error end end end
response_values(env)
click to toggle source
# File lib/faraday/conductivity/selective_errors.rb, line 117 def response_values(env) { status: env.status, headers: env.response_headers, body: env.body } end
should_raise_error?(status)
click to toggle source
# File lib/faraday/conductivity/selective_errors.rb, line 121 def should_raise_error?(status) @on.include?(status) && !@except.include?(status) end