module Barzahlen::Error

Public Class Methods

generate_error_from_response(response_body) click to toggle source

This generates ApiErrors based on the response error classes of CPS

# File lib/barzahlen/error.rb, line 55
def self.generate_error_from_response(response_body)
  error_hash = generate_error_hash_with_symbols(response_body)

  case error_hash[:error_class]
  when "auth"
    return AuthError.new( error_hash )
  when "transport"
    return TransportError.new( error_hash )
  when "idempotency"
    return IdempotencyError.new( error_hash )
  when "rate_limit"
    return RateLimitError.new( error_hash )
  when "invalid_format"
    return InvalidFormatError.new( error_hash )
  when "invalid_state"
    return InvalidStateError.new( error_hash )
  when "invalid_parameter"
    return InvalidParameterError.new( error_hash )
  when "not_allowed"
    return NotAllowedError.new( error_hash )
  when "server_error"
    return ServerError.new( error_hash )
  else
    return UnexpectedError.new( error_hash )
  end
end

Private Class Methods

generate_error_hash_with_symbols(body) click to toggle source
# File lib/barzahlen/error.rb, line 94
def self.generate_error_hash_with_symbols(body)
  if body.is_a?(Hash)
    error_hash = self.symbolize_keys(body)
  elsif body.is_a?(String)
    error_hash = parse_json(body) || {}
  else
    error_hash = Hash.new
  end

  error_hash[:error_class]       ||= "Unexpected_Error"
  error_hash[:error_code]        ||= "Unknown error code (body): \"#{body.to_s}\""
  error_hash[:message]           ||= "Please contact viafintech to help us fix that as soon as possible."
  error_hash[:documentation_url] ||= "https://www.viafintech.com/contact/"
  error_hash[:request_id]        ||= "not_available"

  error_hash
end
parse_json(json) click to toggle source
# File lib/barzahlen/error.rb, line 85
def self.parse_json(json)
  begin
    hash = JSON.parse(json)
  rescue JSON::ParserError => e
    return nil
  end
  self.symbolize_keys(hash)
end
symbolize_keys(hash) click to toggle source
# File lib/barzahlen/error.rb, line 112
def self.symbolize_keys(hash)
  Hash[hash.map{ |k, v| [k.to_sym, v] }]
end