class Quickbooks::Service::BaseService

def check_response(response, options = {})

def check_response(response, options = {})
  if is_json?
    parse_json(response.plain_body)
  elsif !is_pdf?
    parse_xml(response.plain_body)
  end
  @last_response_intuit_tid = if response.respond_to?(:headers) && response.headers
    response.headers['intuit_tid']
  else
    nil
  end
  status = response.code.to_i
  case status
  when 200
    # even HTTP 200 can contain an error, so we always have to peek for an Error
    if response_is_error?
      parse_and_raise_exception(options)
    else
      response
    end
  when 302
    raise "Unhandled HTTP Redirect"
  when 401
    raise Quickbooks::AuthorizationFailure, parse_intuit_error
  when 403
    message = parse_intuit_error[:message]
    if message.include?('ThrottleExceeded')
      raise Quickbooks::ThrottleExceeded, message
    end
    raise Quickbooks::Forbidden, message
  when 404
    raise Quickbooks::NotFound
  when 413
    raise Quickbooks::RequestTooLarge
  when 400, 500
    parse_and_raise_exception(options)
  when 429
    message = parse_intuit_error[:message]
    raise Quickbooks::TooManyRequests, message
  when 502, 503, 504
    raise Quickbooks::ServiceUnavailable
  else
    raise "HTTP Error Code: #{status}, Msg: #{response.plain_body}"
  end
end