Class: Geminize::Middleware::ErrorHandler
- Inherits:
-
Faraday::Middleware
- Object
- Faraday::Middleware
- Geminize::Middleware::ErrorHandler
- Defined in:
- lib/geminize/middleware/error_handler.rb
Overview
Faraday middleware for handling API error responses
Instance Attribute Summary collapse
-
#error_statuses ⇒ Array<Integer>
readonly
HTTP status codes that trigger error handling.
Instance Method Summary collapse
-
#call(env) ⇒ Object
Execute the middleware.
-
#initialize(app, options = {}) ⇒ ErrorHandler
constructor
Initialize the middleware.
-
#on_complete(env) ⇒ Object
Process the API response.
Constructor Details
#initialize(app, options = {}) ⇒ ErrorHandler
Initialize the middleware
17 18 19 20 |
# File 'lib/geminize/middleware/error_handler.rb', line 17 def initialize(app, = {}) super(app) @error_statuses = .fetch(:error_statuses, 400..599).to_a end |
Instance Attribute Details
#error_statuses ⇒ Array<Integer> (readonly)
Returns 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
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
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 |