class Adyen::AdyenError
Attributes
code[R]
msg[R]
request[R]
response[R]
Public Class Methods
new(request = nil, response = nil, msg = nil, code = nil)
click to toggle source
Calls superclass method
# File lib/adyen/errors.rb, line 5 def initialize(request = nil, response = nil, msg = nil, code = nil) mask_fields(request) # 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
Public Instance Methods
mask_fields(request)
click to toggle source
mask PCI data in request
# File lib/adyen/errors.rb, line 26 def mask_fields(request) return if request.nil? # sensitive fields fields_to_mask = [ :expiryMonth, :expiryYear, :encryptedCardNumber, :encryptedExpiryMonth, :encryptedExpiryYear, :encryptedSecurityCode ] # convert to hash if necessary request = request.is_a?(Hash) ? request : JSON.parse(request) # 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]) else if k == :number # show first 6 and last 4 for cards request[k] = "#{v[0,6]}******#{v[12,16]}" 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 end