Merge pull request #810 from stripe/brandur-raise-argument-error

Better error message when passing non-string to custom method
This commit is contained in:
Brandur 2019-07-15 17:06:35 -07:00 committed by GitHub
commit ec015a26a1
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 26 additions and 0 deletions

View File

@ -70,6 +70,11 @@ module Stripe
end
http_path ||= name.to_s
define_singleton_method(name) do |id, params = {}, opts = {}|
unless id.is_a?(String)
raise ArgumentError,
"id should be a string representing the ID of an API resource"
end
url = "#{resource_url}/#{CGI.escape(id)}/#{CGI.escape(http_path)}"
resp, opts = request(http_verb, url, params, opts)
Util.convert_to_stripe_object(resp.data, opts)

View File

@ -4,10 +4,31 @@ require ::File.expand_path("../test_helper", __dir__)
module Stripe
class ApiResourceTest < Test::Unit::TestCase
class CustomMethodAPIResource < APIResource
OBJECT_NAME = "custom_method".freeze
custom_method :my_method, http_verb: :post
end
class NestedTestAPIResource < APIResource
save_nested_resource :external_account
end
context ".custom_method" do
should "call to an RPC-style method" do
stub_request(:post, "#{Stripe.api_base}/v1/custom_methods/ch_123/my_method")
.to_return(body: JSON.generate({}))
CustomMethodAPIResource.my_method("ch_123")
end
should "raise an error if a non-ID is passed" do
e = assert_raises ArgumentError do
CustomMethodAPIResource.my_method(id: "ch_123")
end
assert_equal "id should be a string representing the ID of an API resource",
e.message
end
end
context ".save_nested_resource" do
should "can have a scalar set" do
r = NestedTestAPIResource.new("test_resource")