class SimpleJSONAPIClient::Errors::APIError

Constants

KNOWN_ERRORS

Attributes

response[R]

Public Class Methods

generate(response) click to toggle source
# File lib/simple_jsonapi_client/errors/api_error.rb, line 16
def self.generate(response)
  error = KNOWN_ERRORS[response.status]
  SimpleJSONAPIClient::Errors.const_get(error).new(response)
end
new(response) click to toggle source
Calls superclass method
# File lib/simple_jsonapi_client/errors/api_error.rb, line 24
def initialize(response)
  @response = response
  super(full_message)
end

Public Instance Methods

codes() click to toggle source
# File lib/simple_jsonapi_client/errors/api_error.rb, line 48
def codes
  @codes ||= errors.map { |error| error['code'] }.compact
end
details() click to toggle source
# File lib/simple_jsonapi_client/errors/api_error.rb, line 52
def details
  @details ||= errors.map { |error| error['detail'] }.compact
end
errors() click to toggle source
# File lib/simple_jsonapi_client/errors/api_error.rb, line 29
def errors
  Array(body['errors'])
end
full_message() click to toggle source
# File lib/simple_jsonapi_client/errors/api_error.rb, line 43
def full_message
  "The API returned a #{status} error status and this content:\n" +
    pretty_printed_response.each_line.map { |line| "  #{line}" }.join
end
message() click to toggle source
# File lib/simple_jsonapi_client/errors/api_error.rb, line 33
def message
  if !codes.empty?
    codes_message
  elsif !details.empty?
    details_message
  else
    default_message
  end
end

Private Instance Methods

codes_message() click to toggle source
# File lib/simple_jsonapi_client/errors/api_error.rb, line 62
def codes_message
  codes_word = codes.size == 1 ? 'code' : 'codes'
  "The API returned a #{status} error status with the following error #{codes_word}: #{
  codes.map(&:inspect).join(', ')
  }"
end
default_message() click to toggle source
# File lib/simple_jsonapi_client/errors/api_error.rb, line 76
def default_message
  "The API responded with a #{status} error status."
end
details_message() click to toggle source
# File lib/simple_jsonapi_client/errors/api_error.rb, line 69
def details_message
  details_word = details.size == 1 ? 'detail' : 'details'
  "The API returned a #{status} error status with the following error #{details_word}: #{
  details.map(&:inspect).join(', ')
  }"
end
pretty_printed_response() click to toggle source
# File lib/simple_jsonapi_client/errors/api_error.rb, line 58
def pretty_printed_response
  JSON.pretty_generate(body)
end