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
49
50
51
52
53
54
55
56
57
58
# 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']

  error_messages = errors['error_messages']

  if error_messages.is_a?(Hash)
    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
  else
    @messages << ApiErrorMessage.new('base', {
      'code' => @code,
      'message' => error_messages.to_s,
      'params' => {}
    })
  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



60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
# File 'lib/currency_cloud/errors/api_error.rb', line 60

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