mirror of
https://github.com/stripe/stripe-ruby.git
synced 2025-10-04 00:00:47 -04:00
Merge pull request #262 from stripe/request-ids
Add request IDs to all API errors
This commit is contained in:
commit
8b0a074cbf
@ -139,8 +139,8 @@ module Stripe
|
||||
raise
|
||||
end
|
||||
rescue RestClient::ExceptionWithResponse => e
|
||||
if rcode = e.http_code and rbody = e.http_body
|
||||
handle_api_error(rcode, rbody)
|
||||
if e.response
|
||||
handle_api_error(e.response)
|
||||
else
|
||||
handle_restclient_error(e, api_base_url)
|
||||
end
|
||||
@ -241,45 +241,46 @@ module Stripe
|
||||
"(HTTP response code was #{rcode})", rcode, rbody)
|
||||
end
|
||||
|
||||
def self.handle_api_error(rcode, rbody)
|
||||
def self.handle_api_error(resp)
|
||||
begin
|
||||
error_obj = JSON.parse(rbody)
|
||||
error_obj = JSON.parse(resp.body)
|
||||
error_obj = Util.symbolize_names(error_obj)
|
||||
error = error_obj[:error] or raise StripeError.new # escape from parsing
|
||||
|
||||
rescue JSON::ParserError, StripeError
|
||||
raise general_api_error(rcode, rbody)
|
||||
raise general_api_error(resp.code, resp.body)
|
||||
end
|
||||
|
||||
case rcode
|
||||
case resp.code
|
||||
when 400, 404
|
||||
raise invalid_request_error error, rcode, rbody, error_obj
|
||||
raise invalid_request_error(error, resp, error_obj)
|
||||
when 401
|
||||
raise authentication_error error, rcode, rbody, error_obj
|
||||
raise authentication_error(error, resp, error_obj)
|
||||
when 402
|
||||
raise card_error error, rcode, rbody, error_obj
|
||||
raise card_error(error, resp, error_obj)
|
||||
else
|
||||
raise api_error error, rcode, rbody, error_obj
|
||||
raise api_error(error, resp, error_obj)
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
def self.invalid_request_error(error, rcode, rbody, error_obj)
|
||||
InvalidRequestError.new(error[:message], error[:param], rcode,
|
||||
rbody, error_obj)
|
||||
def self.invalid_request_error(error, resp, error_obj)
|
||||
InvalidRequestError.new(error[:message], error[:param], resp.code,
|
||||
resp.body, error_obj, resp.headers)
|
||||
end
|
||||
|
||||
def self.authentication_error(error, rcode, rbody, error_obj)
|
||||
AuthenticationError.new(error[:message], rcode, rbody, error_obj)
|
||||
def self.authentication_error(error, resp, error_obj)
|
||||
AuthenticationError.new(error[:message], resp.code, resp.body, error_obj,
|
||||
resp.headers)
|
||||
end
|
||||
|
||||
def self.card_error(error, rcode, rbody, error_obj)
|
||||
def self.card_error(error, resp, error_obj)
|
||||
CardError.new(error[:message], error[:param], error[:code],
|
||||
rcode, rbody, error_obj)
|
||||
resp.code, resp.body, error_obj, resp.headers)
|
||||
end
|
||||
|
||||
def self.api_error(error, rcode, rbody, error_obj)
|
||||
APIError.new(error[:message], rcode, rbody, error_obj)
|
||||
def self.api_error(error, resp, error_obj)
|
||||
APIError.new(error[:message], resp.code, resp.body, error_obj, resp.headers)
|
||||
end
|
||||
|
||||
def self.handle_restclient_error(e, api_base_url=nil)
|
||||
|
@ -2,8 +2,9 @@ module Stripe
|
||||
class CardError < StripeError
|
||||
attr_reader :param, :code
|
||||
|
||||
def initialize(message, param, code, http_status=nil, http_body=nil, json_body=nil)
|
||||
super(message, http_status, http_body, json_body)
|
||||
def initialize(message, param, code, http_status=nil, http_body=nil, json_body=nil,
|
||||
http_headers=nil)
|
||||
super(message, http_status, http_body, json_body, http_headers)
|
||||
@param = param
|
||||
@code = code
|
||||
end
|
||||
|
@ -2,8 +2,9 @@ module Stripe
|
||||
class InvalidRequestError < StripeError
|
||||
attr_accessor :param
|
||||
|
||||
def initialize(message, param, http_status=nil, http_body=nil, json_body=nil)
|
||||
super(message, http_status, http_body, json_body)
|
||||
def initialize(message, param, http_status=nil, http_body=nil, json_body=nil,
|
||||
http_headers=nil)
|
||||
super(message, http_status, http_body, json_body, http_headers)
|
||||
@param = param
|
||||
end
|
||||
end
|
||||
|
@ -3,18 +3,24 @@ module Stripe
|
||||
attr_reader :message
|
||||
attr_reader :http_status
|
||||
attr_reader :http_body
|
||||
attr_reader :http_headers
|
||||
attr_reader :request_id
|
||||
attr_reader :json_body
|
||||
|
||||
def initialize(message=nil, http_status=nil, http_body=nil, json_body=nil)
|
||||
def initialize(message=nil, http_status=nil, http_body=nil, json_body=nil,
|
||||
http_headers=nil)
|
||||
@message = message
|
||||
@http_status = http_status
|
||||
@http_body = http_body
|
||||
@http_headers = http_headers || {}
|
||||
@json_body = json_body
|
||||
@request_id = @http_headers[:request_id]
|
||||
end
|
||||
|
||||
def to_s
|
||||
status_string = @http_status.nil? ? "" : "(Status #{@http_status}) "
|
||||
"#{status_string}#{@message}"
|
||||
id_string = @request_id.nil? ? "" : "(Request #{@request_id}) "
|
||||
"#{status_string}#{id_string}#{@message}"
|
||||
end
|
||||
end
|
||||
end
|
||||
|
@ -5,9 +5,14 @@ module Stripe
|
||||
# can't just use the stubs interface.
|
||||
body = JSON.generate(body) if !(body.kind_of? String)
|
||||
m = mock
|
||||
m.instance_variable_set('@stripe_values', { :body => body, :code => code })
|
||||
m.instance_variable_set('@stripe_values', {
|
||||
:body => body,
|
||||
:code => code,
|
||||
:headers => {},
|
||||
})
|
||||
def m.body; @stripe_values[:body]; end
|
||||
def m.code; @stripe_values[:code]; end
|
||||
def m.headers; @stripe_values[:headers]; end
|
||||
m
|
||||
end
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user