class CurrencyCloud::ApiError

Attributes

code[R]
messages[R]
raw_response[R]
status_code[R]

Public Class Methods

new(verb, route, params, raw_response) click to toggle source
# File lib/currency_cloud/errors/api_error.rb, line 27
def initialize(verb, route, params, raw_response)
  @verb = verb
  @route = route
  @params = redacted_params(params)
  @raw_response = raw_response
  @status_code = raw_response.code
  errors = raw_response.parsed_response
  @code = errors['error_code']
  @messages = []

  return unless errors['error_messages']

  errors['error_messages'].each do |field, messages|
    if messages.is_a?(Array)
      messages.each do |message|
        @messages << ApiErrorMessage.new(field, message)
      end
    else
      @messages << ApiErrorMessage.new(field, messages)
    end
  end
end

Public Instance Methods

to_s() click to toggle source
Calls superclass method
# File lib/currency_cloud/errors/api_error.rb, line 50
def to_s
  class_name = super

  string_params = Hash[@params.map { |k, v| [k.to_s, v.to_s] }]

  error_details = {
    'platform' => platform,
    'request' => {
      'parameters' => string_params,
      'verb' => @verb.to_s,
      'url' => @route
    },
    'response' => {
      'status_code' => status_code,
      'date' => raw_response.headers['Date'],
      'request_id' => (raw_response.headers['x-request-id'] || 0).to_i
    },
    'errors' => messages.map(&:to_h)
  }
  "#{class_name}#{$INPUT_RECORD_SEPARATOR}#{YAML.dump(error_details)}"
end