class Contentful::Management::Error

All errors raised by the contentful gem are either instances of Contentful::Management::Error or inherit from Contentful::Management::Error

Attributes

error[R]
response[R]

Public Class Methods

[](error_status_code) click to toggle source

Shortcut for creating specialized error classes USAGE rescue Contentful::Management::Error

# File lib/contentful/management/error.rb, line 22
def self.[](error_status_code)
  errors = {
    400 => BadRequest,
    401 => Unauthorized,
    403 => AccessDenied,
    404 => NotFound,
    409 => Conflict,
    422 => UnprocessableEntity,
    429 => RateLimitExceeded,
    500 => ServerError,
    502 => BadGateway,
    503 => ServiceUnavailable
  }.freeze

  errors.key?(error_status_code) ? errors[error_status_code] : Error
end
new(response) click to toggle source
Calls superclass method
# File lib/contentful/management/error.rb, line 10
def initialize(response)
  @response = response
  @error = {
    url: response.request.endpoint,
    message: response.error_message,
    details: response.raw.body.instance_variable_get(:@contents)
  }
  super best_available_message
end

Protected Instance Methods

additional_info() click to toggle source
# File lib/contentful/management/error.rb, line 53
def additional_info
  []
end
additional_info?() click to toggle source
# File lib/contentful/management/error.rb, line 49
def additional_info?
  false
end
best_available_message() click to toggle source
# File lib/contentful/management/error.rb, line 57
def best_available_message
  error_message = [
    "HTTP status code: #{@response.raw.status}"
  ]

  begin
    response_json = @response.load_json
    message = response_json.fetch('message', default_error_message)
    details = response_json.fetch('details', nil)
    request_id = response_json.fetch('requestId', nil)

    error_message << "Message: #{message}"
    error_message << "Details: #{handle_details(details)}" if details
    error_message << "Request ID: #{request_id}" if request_id
  rescue StandardError
    error_message << "Message: #{default_error_message}"
  end

  error_message << additional_info if additional_info?

  error_message.join("\n")
end
default_error_message() click to toggle source
# File lib/contentful/management/error.rb, line 41
def default_error_message
  "The following error was received: #{@response.raw.body}"
end
handle_details(details) click to toggle source
# File lib/contentful/management/error.rb, line 45
def handle_details(details)
  details.to_s
end