Module: FluvPay::Errors
- Defined in:
- lib/fluvpay/errors.rb
Class Method Summary collapse
-
.from_response(status_code, body, retry_after_header: nil) ⇒ FluvPay::Error
Converte uma resposta de erro (status + corpo já parseado) na exceção tipada correspondente.
Class Method Details
.from_response(status_code, body, retry_after_header: nil) ⇒ FluvPay::Error
Converte uma resposta de erro (status + corpo já parseado) na exceção tipada correspondente. Usado internamente pelo cliente HTTP.
77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 |
# File 'lib/fluvpay/errors.rb', line 77 def self.from_response(status_code, body, retry_after_header: nil) error_body = body.is_a?(Hash) ? (body["error"] || body[:error]) : nil error_body = {} unless error_body.is_a?(Hash) code = error_body["code"] || error_body[:code] = error_body["message"] || error_body[:message] || (status_code) details = error_body["details"] || error_body[:details] || [] trace_id = error_body["trace_id"] || error_body[:trace_id] kwargs = { code: code, details: details, trace_id: trace_id, status_code: status_code } case status_code when 400, 422 ValidationError.new(, **kwargs) when 401 AuthenticationError.new(, **kwargs) when 403 PermissionError.new(, **kwargs) when 404 NotFoundError.new(, **kwargs) when 409 ConflictError.new(, **kwargs) when 429 RateLimitError.new(, retry_after: parse_retry_after(retry_after_header), **kwargs) else if status_code >= 500 ServerError.new(, **kwargs) else Error.new(, **kwargs) end end end |