Exception: DatabasusRuby::APIError

Inherits:
Error
  • Object
show all
Defined in:
lib/databasus_ruby/error.rb,
lib/databasus_ruby/error.rb,
sig/databasus_ruby.rbs

Overview

Raised when Databasus answers with a non-successful status code.

Constant Summary collapse

STATUS_ERRORS =

Returns:

{
  400 => BadRequestError,
  401 => AuthenticationError,
  403 => ForbiddenError,
  404 => NotFoundError,
  409 => ConflictError,
  429 => RateLimitError
}.freeze

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(message = nil, status: nil, body: nil, response: nil) ⇒ APIError

Returns a new instance of APIError.

Parameters:

  • message (String, nil) (defaults to: nil)
  • status: (Integer, nil) (defaults to: nil)
  • body: (Object) (defaults to: nil)
  • response: (Object) (defaults to: nil)


15
16
17
18
19
20
# File 'lib/databasus_ruby/error.rb', line 15

def initialize(message = nil, status: nil, body: nil, response: nil)
  @status = status
  @body = body
  @response = response
  super(message || "Databasus API returned #{status}")
end

Instance Attribute Details

#bodyObject (readonly)

Returns the value of attribute body.

Returns:



13
14
15
# File 'lib/databasus_ruby/error.rb', line 13

def body
  @body
end

#responseObject (readonly)

Returns the value of attribute response.

Returns:



13
14
15
# File 'lib/databasus_ruby/error.rb', line 13

def response
  @response
end

#statusInteger? (readonly)

Returns the value of attribute status.

Returns:

  • (Integer, nil)


13
14
15
# File 'lib/databasus_ruby/error.rb', line 13

def status
  @status
end

Class Method Details

.for_status(status) ⇒ singleton(APIError)

Parameters:

  • status (Integer)

Returns:



28
29
30
31
32
# File 'lib/databasus_ruby/error.rb', line 28

def self.for_status(status)
  return ServerError if (500..599).cover?(status)

  STATUS_ERRORS.fetch(status, APIError)
end

.from_response(response) ⇒ APIError

Maps a Faraday response onto the most specific error class available.

Parameters:

Returns:



23
24
25
26
# File 'lib/databasus_ruby/error.rb', line 23

def self.from_response(response)
  klass = for_status(response.status)
  klass.new(message_from(response.body), status: response.status, body: response.body, response: response)
end