class FaradayMiddleware::RaiseHttpException
@private
Public Class Methods
new(app)
click to toggle source
Calls superclass method
# File lib/qbo_api/raise_http_exception.rb, line 33 def initialize(app) super app end
Public Instance Methods
call(env)
click to toggle source
# File lib/qbo_api/raise_http_exception.rb, line 7 def call(env) @app.call(env).on_complete do |response| case response.status when 200 when 400 raise QboApi::BadRequest.new(error_message(response)) when 401 raise QboApi::Unauthorized.new(error_message(response)) when 403 raise QboApi::Forbidden.new(error_message(response)) when 404 raise QboApi::NotFound.new(error_message(response)) when 429 raise QboApi::TooManyRequests.new(error_message(response)) when 500 raise QboApi::InternalServerError.new(error_message(response)) when 502 raise QboApi::BadGateway.new({ error_body: response.reason_phrase }) when 503 raise QboApi::ServiceUnavailable.new(error_message(response)) when 504 raise QboApi::GatewayTimeout.new(error_message(response)) end end end
Private Instance Methods
error_body(body)
click to toggle source
# File lib/qbo_api/raise_http_exception.rb, line 49 def error_body(body) if not body.nil? and not body.empty? and body.kind_of?(String) body =~ /IntuitResponse/ ? parse_xml(body) : parse_json(body) else nil end end
error_message(response)
click to toggle source
# File lib/qbo_api/raise_http_exception.rb, line 39 def error_message(response) { method: response.method, url: response.url, status: response.status, error_body: error_body(response.body), intuit_tid: response[:response_headers]['intuit_tid'] } end
parse_json(body)
click to toggle source
# File lib/qbo_api/raise_http_exception.rb, line 57 def parse_json(body) res = ::JSON.parse(body) fault = res['Fault'] || res['fault'] errors = fault['Error'] || fault['error'] errors.collect do |error| { fault_type: fault['type'], error_code: error['code'], error_message: error['Message'] || error['message'], error_detail: error['Detail'] || error['detail'] } end end
parse_xml(body)
click to toggle source
# File lib/qbo_api/raise_http_exception.rb, line 71 def parse_xml(body) res = ::Nokogiri::XML(body) r = res.css('Error') r.collect do |e| { fault_type: res.at('Fault')['type'], error_code: res.at('Error')['code'], error_message: e.at('Message').content, error_detail: (detail = e.at('Detail')) ? detail.content : '' } end end