Exception: Adyen::AdyenError

Inherits:
StandardError
  • Object
show all
Defined in:
lib/adyen/errors.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(request = nil, response = nil, msg = nil, code = nil) ⇒ AdyenError

Returns a new instance of AdyenError.



11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
# File 'lib/adyen/errors.rb', line 11

def initialize(request = nil, response = nil, msg = nil, code = nil)
  unless request.nil?
    request = request.is_a?(Hash) ? request : JSON.parse(request, symbolize_names: true)
    mask_fields(request)
  end

  # components of formatted error message
  attributes = {
    code: code,
    msg: msg,
    request: request,
    response: response
  }.select { |_k, v| v }.map { |k, v| "#{k}:#{v}" }.join(', ')
  message = "#{self.class.name} #{attributes}"
  super(message)

  # internal variables
  @code = code
  @response = response
  @request = request
  @msg = msg
end

Instance Attribute Details

#codeObject (readonly)

Returns the value of attribute code.



9
10
11
# File 'lib/adyen/errors.rb', line 9

def code
  @code
end

#msgObject (readonly)

Returns the value of attribute msg.



9
10
11
# File 'lib/adyen/errors.rb', line 9

def msg
  @msg
end

#requestObject (readonly)

Returns the value of attribute request.



9
10
11
# File 'lib/adyen/errors.rb', line 9

def request
  @request
end

#responseObject (readonly)

Returns the value of attribute response.



9
10
11
# File 'lib/adyen/errors.rb', line 9

def response
  @response
end

Instance Method Details

#mask_fields(request) ⇒ Object

mask PCI data in request



35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
# File 'lib/adyen/errors.rb', line 35

def mask_fields(request)
  return if request.nil?

  # sensitive fields
  fields_to_mask = %i[
    expiryMonth
    expiryYear
    encryptedCardNumber
    encryptedExpiryMonth
    encryptedExpiryYear
    encryptedSecurityCode
  ]

  # convert to hash if necessary
  request = request.is_a?(Hash) ? request : JSON.parse(request, symbolize_names: true)

  # iterate through request to find fields to mask
  request.each do |k, v|
    if request[k].is_a?(Hash)
      # recursively traverse multi-level hashes
      mask_fields(request[k])
    elsif k == :number
      request[k] = "#{v[0, 6]}******#{v[12, 16]}"
    # show first 6 and last 4 for cards
    elsif k == :cvc
      # show length of cvc for debugging
      request[k] = '*' * v.length
    elsif fields_to_mask.include? k
      # generic mask for other fields
      request[k] = '***'
    end
  end
end