Skip to content

Commit

Permalink
Better error message when passing non-string to custom method
Browse files Browse the repository at this point in the history
Raises a slightly more helpful error message when passing a non-string
to a custom method (currently, it reads "no implicit conversion of Hash
into String", which is terrible).

This a partial remediation for the problem encountered in #809.
  • Loading branch information
brandur committed Jul 15, 2019
1 parent 267eae5 commit d71cda7
Show file tree
Hide file tree
Showing 2 changed files with 26 additions and 0 deletions.
5 changes: 5 additions & 0 deletions lib/stripe/api_resource.rb
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,11 @@ def self.custom_method(name, http_verb:, http_path: nil)
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)
Expand Down
21 changes: 21 additions & 0 deletions test/stripe/api_resource_test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,31 @@

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")
Expand Down

0 comments on commit d71cda7

Please sign in to comment.