Module: Browserbeam::ErrorHandler

Defined in:
lib/browserbeam/errors.rb

Class Method Summary collapse

Class Method Details

.raise_for_status(status_code, body, headers) ⇒ Object



56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
# File 'lib/browserbeam/errors.rb', line 56

def self.raise_for_status(status_code, body, headers)
  error_data = body.is_a?(Hash) ? (body["error"] || {}) : {}
  code = error_data["code"] || "unknown"
  message = error_data["message"] || "Unknown error"
  context = error_data["context"]
  request_id = headers["x-request-id"]
  retry_after_raw = headers["retry-after"]
  retry_after = retry_after_raw ? retry_after_raw.to_i : nil

  kwargs = { code: code, status_code: status_code, context: context, request_id: request_id }

  case status_code
  when 401
    raise AuthenticationError.new(message, **kwargs)
  when 429
    if code == "quota_exceeded"
      raise QuotaExceededError.new(message, retry_after: retry_after, **kwargs)
    end
    raise RateLimitError.new(message, retry_after: retry_after, **kwargs)
  when 404
    raise SessionNotFoundError.new(message, **kwargs)
  when 503
    raise EngineUnavailableError.new(message, retry_after: retry_after, **kwargs)
  when 400
    raise InvalidRequestError.new(message, **kwargs)
  else
    raise Error.new(message, **kwargs)
  end
end