Class: Geminize::Middleware::ErrorHandler

Inherits:
Faraday::Middleware
  • Object
show all
Defined in:
lib/geminize/middleware/error_handler.rb

Overview

Faraday middleware for handling API error responses

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

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

Initialize the middleware

Parameters:

  • app (#call)

    The Faraday app

  • options (Hash) (defaults to: {})

    Configuration options

Options Hash (options):

  • :error_statuses (Array<Integer>)

    HTTP status codes to handle as errors (default: 400..599)



17
18
19
20
# File 'lib/geminize/middleware/error_handler.rb', line 17

def initialize(app, options = {})
  super(app)
  @error_statuses = options.fetch(:error_statuses, 400..599).to_a
end

Instance Attribute Details

#error_statusesArray<Integer> (readonly)

Returns HTTP status codes that trigger error handling.

Returns:

  • (Array<Integer>)

    HTTP status codes that trigger error handling



11
12
13
# File 'lib/geminize/middleware/error_handler.rb', line 11

def error_statuses
  @error_statuses
end

Instance Method Details

#call(env) ⇒ Object

Execute the middleware

Parameters:

  • env (Faraday::Env)

    The request environment



24
25
26
27
28
29
30
31
32
33
34
35
# File 'lib/geminize/middleware/error_handler.rb', line 24

def call(env)
  @app.call(env).on_complete do |response_env|
    on_complete(response_env) if error_statuses.include?(response_env.status)
  end
rescue Faraday::ConnectionFailed, Faraday::TimeoutError => e
  # Handle network errors
  raise Geminize::RequestError.new(
    "Network error: #{e.message}",
    "CONNECTION_ERROR",
    nil
  )
end

#on_complete(env) ⇒ Object

Process the API response

Parameters:

  • env (Faraday::Env)

    The response environment

Raises:



40
41
42
43
44
45
46
47
48
49
50
# File 'lib/geminize/middleware/error_handler.rb', line 40

def on_complete(env)
  # Create a simplified response object that we can pass to our parser
  response = build_response_for_parser(env)

  # Parse the error response
  error_info = ErrorParser.parse(response)

  # Map to appropriate exception and raise
  exception = ErrorMapper.map(error_info)
  raise exception
end