Class: Faraday::Conductivity::SelectiveErrors

Inherits:
Middleware
  • Object
show all
Defined in:
lib/faraday/conductivity/selective_errors.rb

Constant Summary collapse

ClientErrorStatuses =
400...600

Instance Method Summary collapse

Constructor Details

#initialize(app, options = {}) ⇒ SelectiveErrors

Returns a new instance of SelectiveErrors.



7
8
9
10
11
# File 'lib/faraday/conductivity/selective_errors.rb', line 7

def initialize(app, options = {})
  @app    = app
  @on     = options.fetch(:on) { ClientErrorStatuses }
  @except = options.fetch(:except) { [] }
end

Instance Method Details

#call(env) ⇒ Object



13
14
15
16
17
18
19
20
21
# File 'lib/faraday/conductivity/selective_errors.rb', line 13

def call(env)
  # capture request_body because not accessible afterwards
  request_body = env[:body]
  @app.call(env).on_complete do
    if should_raise_error?(env[:status])
      raise_error(env, request_body)
    end
  end
end

#raise_error(env, request_body) ⇒ Object



27
28
29
30
31
32
33
34
35
36
37
# File 'lib/faraday/conductivity/selective_errors.rb', line 27

def raise_error(env, request_body)
  case env[:status]
  when 404
    raise Faraday::Error::ResourceNotFound, response_values(env, request_body)
  when 407
    # mimic the behavior that we get with proxy requests with HTTPS
    raise Faraday::Error::ConnectionFailed, %{407 "Proxy Authentication Required "}
  else
    raise Faraday::Error::ClientError, response_values(env, request_body)
  end
end

#response_values(env, request_body) ⇒ Object



39
40
41
42
43
44
45
46
47
48
# File 'lib/faraday/conductivity/selective_errors.rb', line 39

def response_values(env, request_body)
  {
    :url              => env[:url],
    :status           => env[:status],
    :request_body     => request_body,
    :request_headers  => env[:request_headers],
    :response_headers => env[:response_headers],
    :response_body    => env[:body],
  }
end

#should_raise_error?(status) ⇒ Boolean

Returns:

  • (Boolean)


23
24
25
# File 'lib/faraday/conductivity/selective_errors.rb', line 23

def should_raise_error?(status)
  @on.include?(status) && !@except.include?(status)
end