class Peddler::Error
Attributes
Public Class Methods
Source
# File lib/peddler/error.rb, line 11 def build(response) payload = begin JSON.parse(response) rescue JSON::ParserError parse_xml_error(response) end if payload.key?("error") class_name = normalize_class_name(payload["error"]) message = payload["error_description"] elsif payload.key?("errors") class_name = normalize_class_name(payload.dig("errors", 0, "code")) message = payload.dig("errors", 0, "message") elsif payload.key?("Code") class_name = payload["Code"] message = payload["Message"] else return end klass = if Errors.const_defined?(class_name) Errors.const_get(class_name) else Errors.const_set(class_name, Class.new(Error)) end klass.new(message, response) rescue NameError # Do nothing if code cannot be converted to a class name end
Source
# File lib/peddler/error.rb, line 61 def initialize(msg = nil, response = nil) @response = response super(msg) end
Calls superclass method
Private Class Methods
Source
# File lib/peddler/error.rb, line 52 def normalize_class_name(code) if code.match?(/\A([a-z_]+|[A-Z_]+)\z/) code.split("_").map(&:capitalize).join else code end end
Source
# File lib/peddler/error.rb, line 44 def parse_xml_error(response) require "nokogiri" doc = Nokogiri::XML(response) Hash[doc.root.elements.collect { |e| [e.name, e.text] }] rescue LoadError, NoMethodError {} end