class Europeana::API::Response

Attributes

error_message[R]
faraday_response[R]
request[R]

Public Class Methods

new(request, faraday_response) click to toggle source

@param request [Europeana::API::Request] @param faraday_response [Faraday::Response]

# File lib/europeana/api/response.rb, line 12
def initialize(request, faraday_response)
  @request = request
  @faraday_response = faraday_response
  @error_message = detect_error_message
end

Public Instance Methods

detect_error_message() click to toggle source
# File lib/europeana/api/response.rb, line 37
def detect_error_message
  return nil unless (400..599).cover?(status)
  if body.is_a?(Hash) && body.key?(:error)
    body[:error]
  else
    Rack::Utils::HTTP_STATUS_CODES[status]
  end
end
validate!() click to toggle source
# File lib/europeana/api/response.rb, line 18
def validate!
  return if body.is_a?(Hash) && body[:success]
  validate_endpoint_errors!
  validate_generic_errors!
end
validate_endpoint_errors!() click to toggle source
# File lib/europeana/api/response.rb, line 24
def validate_endpoint_errors!
  (endpoint[:errors] || {}).each_pair do |error_pattern, exception_class|
    fail exception_class.new(faraday_response), error_message if error_message =~ Regexp.new(error_pattern)
  end
end
validate_generic_errors!() click to toggle source
# File lib/europeana/api/response.rb, line 30
def validate_generic_errors!
  fail Errors::ResourceNotFoundError.new(faraday_response), error_message if status == 404
  fail Errors::MissingAPIKeyError.new(faraday_response), error_message if status == 403 && error_message =~ /No API key/
  fail Errors::ClientError.new(faraday_response), error_message if (400..499).cover?(status)
  fail Errors::ServerError.new(faraday_response), error_message if (500..599).cover?(status)
end