Exception: CurrencyCloud::ApiError

Inherits:
StandardError
  • Object
show all
Includes:
ErrorUtils
Defined in:
lib/currency_cloud/errors/api_error.rb

Constant Summary

Constants included from ErrorUtils

ErrorUtils::REDACTED_PARAMS, ErrorUtils::REDACTED_STRING

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods included from ErrorUtils

#platform, #redacted_params

Constructor Details

#initialize(verb, route, params, raw_response) ⇒ ApiError

Returns a new instance of ApiError.



27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
# 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

Instance Attribute Details

#codeObject (readonly)

Returns the value of attribute code.



25
26
27
# File 'lib/currency_cloud/errors/api_error.rb', line 25

def code
  @code
end

#messagesObject (readonly)

Returns the value of attribute messages.



25
26
27
# File 'lib/currency_cloud/errors/api_error.rb', line 25

def messages
  @messages
end

#raw_responseObject (readonly)

Returns the value of attribute raw_response.



25
26
27
# File 'lib/currency_cloud/errors/api_error.rb', line 25

def raw_response
  @raw_response
end

#status_codeObject (readonly)

Returns the value of attribute status_code.



25
26
27
# File 'lib/currency_cloud/errors/api_error.rb', line 25

def status_code
  @status_code
end

Instance Method Details

#to_sObject



50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
# 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