diff --git a/chargebee.gemspec b/chargebee.gemspec index a4d18b3..ee30554 100644 --- a/chargebee.gemspec +++ b/chargebee.gemspec @@ -140,7 +140,7 @@ Gem::Specification.new do |s| lib/chargebee/models/usage_file.rb lib/chargebee/models/virtual_bank_account.rb lib/chargebee/models/webhook_endpoint.rb - lib/chargebee/nativeRequest.rb + lib/chargebee/native_request.rb lib/chargebee/request.rb lib/chargebee/rest.rb lib/chargebee/result.rb diff --git a/lib/chargebee.rb b/lib/chargebee.rb index 998648b..2fbdd32 100644 --- a/lib/chargebee.rb +++ b/lib/chargebee.rb @@ -1,5 +1,5 @@ require File.dirname(__FILE__) + '/chargebee/environment' -require File.dirname(__FILE__) + '/chargebee/nativeRequest' +require File.dirname(__FILE__) + '/chargebee/native_request' require File.dirname(__FILE__) + '/chargebee/util' require File.dirname(__FILE__) + '/chargebee/request' require File.dirname(__FILE__) + '/chargebee/result' diff --git a/lib/chargebee/errors.rb b/lib/chargebee/errors.rb index b45eed8..0fc32ff 100644 --- a/lib/chargebee/errors.rb +++ b/lib/chargebee/errors.rb @@ -8,6 +8,8 @@ def initialize(message=nil,original_error = nil) end end + class ForbiddenError < Error; end + class IOError < Error; end class APIError < Error diff --git a/lib/chargebee/nativeRequest.rb b/lib/chargebee/native_request.rb similarity index 90% rename from lib/chargebee/nativeRequest.rb rename to lib/chargebee/native_request.rb index 62dc6d0..75af01c 100644 --- a/lib/chargebee/nativeRequest.rb +++ b/lib/chargebee/native_request.rb @@ -167,26 +167,33 @@ def self.handle_json_error(rbody, e) end end + # Handle errors returned by the ChargeBee API. + # + # @param rcode [Integer] HTTP status code. + # @param rbody [String] HTTP response body. + # + # @return [ChargeBee::Error] Appropriate ChargeBee error object. def self.handle_for_error(rcode, rbody) return Error.new("No response returned by ChargeBee API. HTTP status code: #{rcode}") if rcode == 204 + return ForbiddenError.new("Access forbidden. You do not have permission to access this resource.") if rcode == 403 begin error_obj = JSON.parse(rbody) error_obj = Util.symbolize_keys(error_obj) rescue Exception => e - raise Error.new("Error response not in JSON format. The http status code is #{rcode} \n #{rbody.inspect}", e) + return Error.new("Error response not in JSON format. The http status code is #{rcode} \n #{rbody.inspect}", e) end - type = error_obj[:type] - case type + + case error_obj[:type] when "payment" - raise PaymentError.new(rcode, error_obj) + PaymentError.new(rcode, error_obj) when "operation_failed" - raise OperationFailedError.new(rcode, error_obj) + OperationFailedError.new(rcode, error_obj) when "invalid_request" - raise InvalidRequestError.new(rcode, error_obj) + InvalidRequestError.new(rcode, error_obj) when "ubb_batch_ingestion_invalid_request" - raise UbbBatchIngestionInvalidRequestError.new(rcode, error_obj) + UbbBatchIngestionInvalidRequestError.new(rcode, error_obj) else - raise APIError.new(rcode, error_obj) + APIError.new(rcode, error_obj) end end diff --git a/spec/chargebee/native_request_spec.rb b/spec/chargebee/native_request_spec.rb index 60a069e..34218ed 100644 --- a/spec/chargebee/native_request_spec.rb +++ b/spec/chargebee/native_request_spec.rb @@ -141,6 +141,19 @@ module ChargeBee end end + it "raises ForbiddenError for 403 status code" do + stub_request(:get, "https://dummy.chargebee.com/test").to_return( + body: "\r\n