diff --git a/lib/stripe.rb b/lib/stripe.rb index 81458910..4033a5cd 100644 --- a/lib/stripe.rb +++ b/lib/stripe.rb @@ -260,7 +260,11 @@ module Stripe shortname = self.name.split('::')[-1] "/#{CGI.escape(shortname.downcase)}s" end - def url; "#{self.class.url}/#{CGI.escape(id)}"; end + def url + id = self['id'] + raise InvalidRequestError.new("Could not determine which URL to request: #{self.class} instance has invalid ID: #{id.inspect}", 'id') unless id + "#{self.class.url}/#{CGI.escape(id)}" + end def refresh response, api_key = Stripe.request(:get, url, @api_key) diff --git a/test/test_stripe.rb b/test/test_stripe.rb index 2fd0f04a..d0546e4e 100644 --- a/test/test_stripe.rb +++ b/test/test_stripe.rb @@ -1,3 +1,4 @@ +# -*- coding: utf-8 -*- require File.dirname(__FILE__) + '/test_helper.rb' require 'test/unit' require 'context' @@ -76,6 +77,11 @@ class TestStripeRuby < Test::Unit::TestCase assert_raises(Stripe::InvalidRequestError) { c.refresh } end + test "requesting with no ID shuold result in an InvalidRequestError with no request" do + c = Stripe::Customer.new + assert_raises(Stripe::InvalidRequestError) { c.refresh } + end + test "loading an object should issue a GET request" do @mock.expects(:get).once.returns(test_response(test_customer)) c = Stripe::Customer.new("test_customer")