Skip to content

Commit

Permalink
Parse response_body and flesh out attributes
Browse files Browse the repository at this point in the history
  • Loading branch information
dhughes committed Jun 26, 2021
1 parent 99e020b commit 05dfd3a
Showing 1 changed file with 35 additions and 11 deletions.
46 changes: 35 additions & 11 deletions lib/MailchimpMarketing/api_error.rb
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,8 @@
=end

require 'json'

module MailchimpMarketing
class ApiError < StandardError
attr_reader :status, :type, :title, :detail, :instance, :errors
Expand All @@ -21,20 +23,42 @@ class ApiError < StandardError
# ApiError.new("message")
# ApiError.new(:status => 500, :response_headers => {}, :response_body => "")
# ApiError.new(:status => 404, :message => "Not Found")
def initialize(arg = nil)
if arg.is_a? Hash
if arg.key?(:message) || arg.key?('message')
super(arg[:message] || arg['message'])
else
super arg
end
def initialize(arguments = nil)
@arguments = arguments
return super(@arguments) unless @arguments.is_a?(Hash)

@arguments.transform_keys!(&:to_sym)

expand_response_body_into_arguments

super(@arguments[:title] || @arguments[:message])

@arguments.each do |key, value|
instance_variable_set("@#{key}", value)
end
end

private

def expand_response_body_into_arguments
@arguments.merge!(parsed_response_body) unless parsed_response_body.nil?
end

arg.each do |k, v|
instance_variable_set "@#{k}", v
def parsed_response_body
@parsed_response_body ||= begin
parsed_response_body = JSON.parse(@arguments[:response_body]).transform_keys(&:to_sym)

if parsed_response_body[:errors].is_a?(Array)
parsed_response_body[:errors].map do |error|
error.transform_keys!(&:to_sym)
end
end
else
super arg

parsed_response_body
rescue
nil
end
end

end
end

0 comments on commit 05dfd3a

Please sign in to comment.