class QboApi::RaiseHttpException

@private

Public Class Methods

new(app) click to toggle source
Calls superclass method
# File lib/qbo_api/raise_http_exception.rb, line 45
def initialize(app)
  super app
end

Public Instance Methods

on_complete(env) click to toggle source
# File lib/qbo_api/raise_http_exception.rb, line 8
def on_complete(env)
  case env[:status]
  when 400
    raise QboApi::BadRequest.new(error_message(env))
  when 401
    raise QboApi::Unauthorized.new(error_message(env))
  when 403
    raise QboApi::Forbidden.new(error_message(env))
  when 404
    raise QboApi::NotFound.new(error_message(env))
  when 407
    # mimic the behavior that we get with proxy requests with HTTPS
    msg = %(407 "Proxy Authentication Required")
    raise Faraday::ProxyAuthError.new(msg, response_values(env))
  when 409
    raise Faraday::ConflictError, response_values(env)
  when 422
    raise Faraday::UnprocessableEntityError, response_values(env)
  when 429
    raise QboApi::TooManyRequests.new(error_message(env))
  when 500
    raise QboApi::InternalServerError.new(error_message(env))
  when 502
    raise QboApi::BadGateway.new({ error_body: env.reason_phrase })
  when 503
    raise QboApi::ServiceUnavailable.new(error_message(env))
  when 504
    raise QboApi::GatewayTimeout.new(error_message(env))
  when ClientErrorStatuses
    raise Faraday::ClientError, response_values(env)
  when ServerErrorStatuses
    raise Faraday::ServerError, response_values(env)
  when nil
    raise Faraday::NilStatusError, response_values(env)
  end
end

Private Instance Methods

error_body(body) click to toggle source
# File lib/qbo_api/raise_http_exception.rb, line 61
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(env) click to toggle source
# File lib/qbo_api/raise_http_exception.rb, line 51
def error_message(env)
  {
    method: env.method,
    url: env.url,
    status: env.status,
    error_body: error_body(env.body),
    intuit_tid: env[:response_headers]['intuit_tid']
  }
end
parse_json(body) click to toggle source
# File lib/qbo_api/raise_http_exception.rb, line 69
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 83
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