stripe 1.36.1 → 1.36.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/History.txt +4 -0
- data/VERSION +1 -1
- data/lib/stripe/account.rb +25 -18
- data/lib/stripe/api_operations/create.rb +1 -1
- data/lib/stripe/api_operations/delete.rb +1 -1
- data/lib/stripe/api_operations/list.rb +1 -1
- data/lib/stripe/api_operations/update.rb +9 -13
- data/lib/stripe/api_resource.rb +4 -4
- data/lib/stripe/application_fee.rb +1 -1
- data/lib/stripe/application_fee_refund.rb +2 -2
- data/lib/stripe/balance_transaction.rb +1 -1
- data/lib/stripe/bank_account.rb +4 -4
- data/lib/stripe/bitcoin_receiver.rb +4 -4
- data/lib/stripe/bitcoin_transaction.rb +1 -1
- data/lib/stripe/card.rb +4 -4
- data/lib/stripe/charge.rb +6 -6
- data/lib/stripe/country_spec.rb +1 -1
- data/lib/stripe/customer.rb +3 -3
- data/lib/stripe/dispute.rb +1 -1
- data/lib/stripe/file_upload.rb +1 -1
- data/lib/stripe/invoice.rb +2 -2
- data/lib/stripe/list_object.rb +6 -1
- data/lib/stripe/order.rb +1 -1
- data/lib/stripe/product.rb +0 -9
- data/lib/stripe/reversal.rb +2 -2
- data/lib/stripe/singleton_api_resource.rb +3 -3
- data/lib/stripe/stripe_object.rb +128 -63
- data/lib/stripe/subscription.rb +3 -3
- data/lib/stripe/transfer.rb +1 -1
- data/lib/stripe/version.rb +1 -1
- data/test/stripe/account_test.rb +8 -8
- data/test/stripe/api_resource_test.rb +1 -1
- data/test/stripe/country_spec_test.rb +7 -7
- data/test/stripe/customer_card_test.rb +2 -2
- data/test/stripe/list_object_test.rb +35 -12
- data/test/stripe/recipient_card_test.rb +2 -2
- data/test/stripe/stripe_object_test.rb +83 -11
- data/test/test_data.rb +23 -23
- metadata +2 -2
data/lib/stripe/reversal.rb
CHANGED
@@ -3,8 +3,8 @@ module Stripe
|
|
3
3
|
include Stripe::APIOperations::Update
|
4
4
|
extend Stripe::APIOperations::List
|
5
5
|
|
6
|
-
def
|
7
|
-
"#{Transfer.
|
6
|
+
def resource_url
|
7
|
+
"#{Transfer.resource_url}/#{CGI.escape(transfer)}/reversals/#{CGI.escape(id)}"
|
8
8
|
end
|
9
9
|
|
10
10
|
def self.retrieve(id, opts={})
|
@@ -1,14 +1,14 @@
|
|
1
1
|
module Stripe
|
2
2
|
class SingletonAPIResource < APIResource
|
3
|
-
def self.
|
3
|
+
def self.resource_url
|
4
4
|
if self == SingletonAPIResource
|
5
5
|
raise NotImplementedError.new('SingletonAPIResource is an abstract class. You should perform actions on its subclasses (Account, etc.)')
|
6
6
|
end
|
7
7
|
"/v1/#{CGI.escape(class_name.downcase)}"
|
8
8
|
end
|
9
9
|
|
10
|
-
def
|
11
|
-
self.class.
|
10
|
+
def resource_url
|
11
|
+
self.class.resource_url
|
12
12
|
end
|
13
13
|
|
14
14
|
def self.retrieve(opts={})
|
data/lib/stripe/stripe_object.rb
CHANGED
@@ -72,13 +72,21 @@ module Stripe
|
|
72
72
|
#
|
73
73
|
# * +values+ - Hash of values to use to update the current attributes of
|
74
74
|
# the object.
|
75
|
+
# * +:opts+ Options for StripeObject like an API key.
|
75
76
|
#
|
76
77
|
# ==== Options
|
77
78
|
#
|
78
|
-
# * +:
|
79
|
-
|
79
|
+
# * +:dirty+ Whether values should be initiated as "dirty" (unsaved) and
|
80
|
+
# which applies only to new StripeObjects being ininiated under this
|
81
|
+
# StripeObject. Defaults to true.
|
82
|
+
def update_attributes(values, opts = {}, method_options = {})
|
83
|
+
# Default to true. TODO: Convert to optional arguments after we're off
|
84
|
+
# 1.9 which will make this quite a bit more clear.
|
85
|
+
dirty = method_options.fetch(:dirty, true)
|
86
|
+
|
80
87
|
values.each do |k, v|
|
81
88
|
@values[k] = Util.convert_to_stripe_object(v, opts)
|
89
|
+
dirty_value!(@values[k]) if dirty
|
82
90
|
@unsaved_values.add(k)
|
83
91
|
end
|
84
92
|
end
|
@@ -142,73 +150,51 @@ module Stripe
|
|
142
150
|
end
|
143
151
|
end
|
144
152
|
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
# e.g. as object.key = {foo => bar}
|
154
|
-
update = new_value
|
155
|
-
update = update.to_hash if update.is_a?(StripeObject)
|
156
|
-
new_keys = update.keys.map(&:to_sym)
|
157
|
-
|
158
|
-
# remove keys at the server, but not known locally
|
159
|
-
if @original_values[key]
|
160
|
-
keys_to_unset = @original_values[key].keys - new_keys
|
161
|
-
keys_to_unset.each {|key| update[key] = ''}
|
162
|
-
end
|
163
|
-
|
164
|
-
update
|
165
|
-
else
|
166
|
-
# can be serialized normally
|
167
|
-
self.class.serialize_params(new_value)
|
153
|
+
# Sets all keys within the StripeObject as unsaved so that they will be
|
154
|
+
# included with an update when #serialize_params is called. This method is
|
155
|
+
# also recursive, so any StripeObjects contained as values or which are
|
156
|
+
# values in a tenant array are also marked as dirty.
|
157
|
+
def dirty!
|
158
|
+
@unsaved_values = Set.new(@values.keys)
|
159
|
+
@values.each do |k, v|
|
160
|
+
dirty_value!(v)
|
168
161
|
end
|
169
162
|
end
|
170
163
|
|
171
|
-
def
|
172
|
-
|
173
|
-
|
174
|
-
|
175
|
-
|
176
|
-
update
|
177
|
-
|
178
|
-
|
179
|
-
|
180
|
-
|
164
|
+
def serialize_params(options = {})
|
165
|
+
update_hash = {}
|
166
|
+
|
167
|
+
@values.each do |k, v|
|
168
|
+
# There are a few reasons that we may want to add in a parameter for
|
169
|
+
# update:
|
170
|
+
#
|
171
|
+
# 1. The `force` option has been set.
|
172
|
+
# 2. We know that it was modified.
|
173
|
+
# 3. Its value is a StripeObject. A StripeObject may contain modified
|
174
|
+
# values within in that its parent StripeObject doesn't know about.
|
175
|
+
#
|
176
|
+
unsaved = @unsaved_values.include?(k)
|
177
|
+
if options[:force] || unsaved || v.is_a?(StripeObject)
|
178
|
+
update_hash[k.to_sym] =
|
179
|
+
serialize_params_value(@values[k], @original_values[k], unsaved, options[:force])
|
181
180
|
end
|
182
|
-
|
183
|
-
unsaved_keys = obj.instance_variable_get(:@unsaved_values)
|
184
|
-
obj_values = obj.instance_variable_get(:@values)
|
185
|
-
update_hash = {}
|
181
|
+
end
|
186
182
|
|
187
|
-
|
188
|
-
|
189
|
-
|
183
|
+
# a `nil` that makes it out of `#serialize_params_value` signals an empty
|
184
|
+
# value that we shouldn't appear in the serialized form of the object
|
185
|
+
update_hash.reject! { |_, v| v == nil }
|
190
186
|
|
191
|
-
|
192
|
-
|
193
|
-
original_value = obj.instance_variable_get(:@original_values)[k]
|
194
|
-
|
195
|
-
# the conditional here tests whether the old and new values are
|
196
|
-
# different (and therefore needs an update), or the same (meaning
|
197
|
-
# we can leave it out of the request)
|
198
|
-
if updated = serialize_params(v, original_value)
|
199
|
-
update_hash[k] = updated
|
200
|
-
else
|
201
|
-
update_hash.delete(k)
|
202
|
-
end
|
203
|
-
elsif v.is_a?(StripeObject) || v.is_a?(Hash)
|
204
|
-
update_hash[k] = obj.serialize_nested_object(k)
|
205
|
-
end
|
206
|
-
end
|
187
|
+
update_hash
|
188
|
+
end
|
207
189
|
|
208
|
-
|
209
|
-
|
210
|
-
|
190
|
+
class << self
|
191
|
+
# This class method has been deprecated in favor of the instance method
|
192
|
+
# of the same name.
|
193
|
+
def serialize_params(obj, options = {})
|
194
|
+
obj.serialize_params(options)
|
211
195
|
end
|
196
|
+
extend Gem::Deprecate
|
197
|
+
deprecate :serialize_params, "#serialize_params", 2016, 9
|
212
198
|
end
|
213
199
|
|
214
200
|
protected
|
@@ -249,7 +235,8 @@ module Stripe
|
|
249
235
|
"We interpret empty strings as nil in requests. " \
|
250
236
|
"You may set #{self}.#{k} = nil to delete the property.")
|
251
237
|
end
|
252
|
-
@values[k] = v
|
238
|
+
@values[k] = Util.convert_to_stripe_object(v, @opts)
|
239
|
+
dirty_value!(@values[k])
|
253
240
|
@unsaved_values.add(k)
|
254
241
|
end
|
255
242
|
|
@@ -328,7 +315,7 @@ module Stripe
|
|
328
315
|
@unsaved_values.delete(k)
|
329
316
|
end
|
330
317
|
|
331
|
-
update_attributes(values, opts)
|
318
|
+
update_attributes(values, opts, :dirty => false)
|
332
319
|
values.each do |k, _|
|
333
320
|
@transient_values.delete(k)
|
334
321
|
@unsaved_values.delete(k)
|
@@ -336,5 +323,83 @@ module Stripe
|
|
336
323
|
|
337
324
|
self
|
338
325
|
end
|
326
|
+
|
327
|
+
def serialize_params_value(value, original, unsaved, force)
|
328
|
+
case value
|
329
|
+
when nil
|
330
|
+
''
|
331
|
+
|
332
|
+
# The logic here is that essentially any object embedded in another
|
333
|
+
# object that had a `type` is actually an API resource of a different
|
334
|
+
# type that's been included in the response. These other resources must
|
335
|
+
# be updated from their proper endpoints, and therefore they are not
|
336
|
+
# included when serializing even if they've been modified.
|
337
|
+
when APIResource
|
338
|
+
nil
|
339
|
+
|
340
|
+
when Array
|
341
|
+
update = value.map { |v| serialize_params_value(v, nil, true, force) }
|
342
|
+
|
343
|
+
# This prevents an array that's unchanged from being resent.
|
344
|
+
if update != serialize_params_value(original, nil, true, force)
|
345
|
+
update
|
346
|
+
else
|
347
|
+
nil
|
348
|
+
end
|
349
|
+
|
350
|
+
# Handle a Hash for now, but in the long run we should be able to
|
351
|
+
# eliminate all places where hashes are stored as values internally by
|
352
|
+
# making sure any time one is set, we convert it to a StripeObject. This
|
353
|
+
# will simplify our model by making data within an object more
|
354
|
+
# consistent.
|
355
|
+
#
|
356
|
+
# For now, you can still run into a hash if someone appends one to an
|
357
|
+
# existing array being held by a StripeObject. This could happen for
|
358
|
+
# example by appending a new hash onto `additional_owners` for an
|
359
|
+
# account.
|
360
|
+
when Hash
|
361
|
+
Util.convert_to_stripe_object(value, @opts).serialize_params
|
362
|
+
|
363
|
+
when StripeObject
|
364
|
+
update = value.serialize_params(:force => force)
|
365
|
+
|
366
|
+
# If the entire object was replaced, then we need blank each field of
|
367
|
+
# the old object that held a value. The new serialized values will
|
368
|
+
# override any of these empty values.
|
369
|
+
update = empty_values(original).merge(update) if original && unsaved
|
370
|
+
|
371
|
+
update
|
372
|
+
|
373
|
+
else
|
374
|
+
value
|
375
|
+
end
|
376
|
+
end
|
377
|
+
|
378
|
+
private
|
379
|
+
|
380
|
+
def dirty_value!(value)
|
381
|
+
case value
|
382
|
+
when Array
|
383
|
+
value.map { |v| dirty_value!(v) }
|
384
|
+
when StripeObject
|
385
|
+
value.dirty!
|
386
|
+
end
|
387
|
+
end
|
388
|
+
|
389
|
+
# Returns a hash of empty values for all the values that are in the given
|
390
|
+
# StripeObject.
|
391
|
+
def empty_values(obj)
|
392
|
+
values = case obj
|
393
|
+
when Hash then obj
|
394
|
+
when StripeObject then obj.instance_variable_get(:@values)
|
395
|
+
else
|
396
|
+
raise ArgumentError, "#empty_values got unexpected object type: #{obj.class.name}"
|
397
|
+
end
|
398
|
+
|
399
|
+
values.inject({}) do |update, (k, _)|
|
400
|
+
update[k] = ''
|
401
|
+
update
|
402
|
+
end
|
403
|
+
end
|
339
404
|
end
|
340
405
|
end
|
data/lib/stripe/subscription.rb
CHANGED
@@ -3,8 +3,8 @@ module Stripe
|
|
3
3
|
include Stripe::APIOperations::Update
|
4
4
|
include Stripe::APIOperations::Delete
|
5
5
|
|
6
|
-
def
|
7
|
-
"#{Customer.
|
6
|
+
def resource_url
|
7
|
+
"#{Customer.resource_url}/#{CGI.escape(customer)}/subscriptions/#{CGI.escape(id)}"
|
8
8
|
end
|
9
9
|
|
10
10
|
def self.retrieve(id, opts=nil)
|
@@ -19,7 +19,7 @@ module Stripe
|
|
19
19
|
private
|
20
20
|
|
21
21
|
def discount_url
|
22
|
-
|
22
|
+
resource_url + '/discount'
|
23
23
|
end
|
24
24
|
end
|
25
25
|
end
|
data/lib/stripe/transfer.rb
CHANGED
data/lib/stripe/version.rb
CHANGED
data/test/stripe/account_test.rb
CHANGED
@@ -121,7 +121,7 @@ module Stripe
|
|
121
121
|
:id => 'acct_1234',
|
122
122
|
:external_accounts => {
|
123
123
|
:object => "list",
|
124
|
-
:
|
124
|
+
:resource_url => "/v1/accounts/acct_1234/external_accounts",
|
125
125
|
:data => [],
|
126
126
|
}
|
127
127
|
}
|
@@ -140,7 +140,7 @@ module Stripe
|
|
140
140
|
:id => 'acct_1234',
|
141
141
|
:external_accounts => {
|
142
142
|
:object => "list",
|
143
|
-
:
|
143
|
+
:resource_url => "/v1/accounts/acct_1234/external_accounts",
|
144
144
|
:data => [{
|
145
145
|
:id => "ba_1234",
|
146
146
|
:object => "bank_account",
|
@@ -155,8 +155,8 @@ module Stripe
|
|
155
155
|
should "#serialize_params an a new additional_owners" do
|
156
156
|
obj = Stripe::Util.convert_to_stripe_object({
|
157
157
|
:object => "account",
|
158
|
-
:legal_entity => {
|
159
|
-
},
|
158
|
+
:legal_entity => Stripe::StripeObject.construct_from({
|
159
|
+
}),
|
160
160
|
}, {})
|
161
161
|
obj.legal_entity.additional_owners = [
|
162
162
|
{ :first_name => "Joe" },
|
@@ -171,7 +171,7 @@ module Stripe
|
|
171
171
|
}
|
172
172
|
}
|
173
173
|
}
|
174
|
-
assert_equal(expected, obj.
|
174
|
+
assert_equal(expected, obj.serialize_params)
|
175
175
|
end
|
176
176
|
|
177
177
|
should "#serialize_params on an partially changed additional_owners" do
|
@@ -197,7 +197,7 @@ module Stripe
|
|
197
197
|
}
|
198
198
|
}
|
199
199
|
}
|
200
|
-
assert_equal(expected, obj.
|
200
|
+
assert_equal(expected, obj.serialize_params)
|
201
201
|
end
|
202
202
|
|
203
203
|
should "#serialize_params on an unchanged additional_owners" do
|
@@ -220,7 +220,7 @@ module Stripe
|
|
220
220
|
:additional_owners => {}
|
221
221
|
}
|
222
222
|
}
|
223
|
-
assert_equal(expected, obj.
|
223
|
+
assert_equal(expected, obj.serialize_params)
|
224
224
|
end
|
225
225
|
|
226
226
|
# Note that the empty string that we send for this one has a special
|
@@ -246,7 +246,7 @@ module Stripe
|
|
246
246
|
:additional_owners => ""
|
247
247
|
}
|
248
248
|
}
|
249
|
-
assert_equal(expected, obj.
|
249
|
+
assert_equal(expected, obj.serialize_params)
|
250
250
|
end
|
251
251
|
end
|
252
252
|
end
|
@@ -6,8 +6,8 @@ module Stripe
|
|
6
6
|
@mock.expects(:get).once.
|
7
7
|
returns(make_response(country_spec_array))
|
8
8
|
c = Stripe::CountrySpec.list
|
9
|
-
|
10
|
-
assert_equal('/v1/country_specs', c.
|
9
|
+
|
10
|
+
assert_equal('/v1/country_specs', c.resource_url)
|
11
11
|
assert_equal('list', c.object)
|
12
12
|
assert(c.data.kind_of?(Array))
|
13
13
|
assert_equal('US', c.data[0].id)
|
@@ -20,17 +20,17 @@ module Stripe
|
|
20
20
|
with('https://api.stripe.com/v1/country_specs/US', nil, nil).
|
21
21
|
returns(make_response(resp))
|
22
22
|
s = Stripe::CountrySpec.retrieve('US')
|
23
|
-
|
24
|
-
assert_equal('/v1/country_specs/US', s.
|
23
|
+
|
24
|
+
assert_equal('/v1/country_specs/US', s.resource_url)
|
25
25
|
assert_equal('country_spec', s.object)
|
26
26
|
assert(s.kind_of?(Stripe::CountrySpec))
|
27
|
-
|
27
|
+
|
28
28
|
s.supported_bank_account_currencies.map{ |k,v| assert v.kind_of?(Array) }
|
29
29
|
assert_equal(['US'], s.supported_bank_account_currencies['usd'])
|
30
30
|
assert(s.supported_payment_currencies.include?('usd'))
|
31
31
|
assert s.supported_payment_currencies.kind_of?(Array)
|
32
32
|
assert s.supported_payment_methods.kind_of?(Array)
|
33
|
-
|
33
|
+
|
34
34
|
['individual', 'company'].map{ |type|
|
35
35
|
item = s.verification_fields[type]
|
36
36
|
assert item.minimum.include?('external_account')
|
@@ -40,4 +40,4 @@ module Stripe
|
|
40
40
|
}
|
41
41
|
end
|
42
42
|
end
|
43
|
-
end
|
43
|
+
end
|
@@ -17,14 +17,14 @@ module Stripe
|
|
17
17
|
assert cards[0].kind_of? Stripe::Card
|
18
18
|
end
|
19
19
|
|
20
|
-
should "customer cards should have the correct url" do
|
20
|
+
should "customer cards should have the correct resource url" do
|
21
21
|
c = customer
|
22
22
|
@mock.expects(:get).once.returns(make_response(make_card(
|
23
23
|
:id => 'test_card',
|
24
24
|
:customer => 'test_customer'
|
25
25
|
)))
|
26
26
|
card = c.sources.retrieve('card')
|
27
|
-
assert_equal CUSTOMER_CARD_URL, card.
|
27
|
+
assert_equal CUSTOMER_CARD_URL, card.resource_url
|
28
28
|
end
|
29
29
|
|
30
30
|
should "customer cards should be deletable" do
|
@@ -31,7 +31,11 @@ module Stripe
|
|
31
31
|
]
|
32
32
|
expected = Util.convert_to_stripe_object(arr, {})
|
33
33
|
|
34
|
-
list = TestListObject.construct_from({
|
34
|
+
list = TestListObject.construct_from({
|
35
|
+
:data => [{ :id => 1 }],
|
36
|
+
:has_more => true,
|
37
|
+
:url => "/things",
|
38
|
+
})
|
35
39
|
@mock.expects(:get).once.with("#{Stripe.api_base}/things?starting_after=1", nil, nil).
|
36
40
|
returns(make_response({ :data => [{ :id => 2 }, { :id => 3}], :has_more => false }))
|
37
41
|
|
@@ -46,7 +50,11 @@ module Stripe
|
|
46
50
|
]
|
47
51
|
expected = Util.convert_to_stripe_object(arr, {})
|
48
52
|
|
49
|
-
list = TestListObject.construct_from({
|
53
|
+
list = TestListObject.construct_from({
|
54
|
+
:data => [{ :id => 1 }],
|
55
|
+
:has_more => true,
|
56
|
+
:url => "/things",
|
57
|
+
})
|
50
58
|
@mock.expects(:get).once.with("#{Stripe.api_base}/things?starting_after=1", nil, nil).
|
51
59
|
returns(make_response({ :data => [{ :id => 2 }, { :id => 3}], :has_more => false }))
|
52
60
|
|
@@ -70,7 +78,11 @@ module Stripe
|
|
70
78
|
#
|
71
79
|
|
72
80
|
should "fetch a next page through #next_page" do
|
73
|
-
list = TestListObject.construct_from({
|
81
|
+
list = TestListObject.construct_from({
|
82
|
+
:data => [{ :id => 1 }],
|
83
|
+
:has_more => true,
|
84
|
+
:url => "/things",
|
85
|
+
})
|
74
86
|
@mock.expects(:get).once.with("#{Stripe.api_base}/things?starting_after=1", nil, nil).
|
75
87
|
returns(make_response({ :data => [{ :id => 2 }], :has_more => false }))
|
76
88
|
next_list = list.next_page
|
@@ -78,7 +90,11 @@ module Stripe
|
|
78
90
|
end
|
79
91
|
|
80
92
|
should "fetch a next page through #next_page and respect limit" do
|
81
|
-
list = TestListObject.construct_from({
|
93
|
+
list = TestListObject.construct_from({
|
94
|
+
:data => [{ :id => 1 }],
|
95
|
+
:has_more => true,
|
96
|
+
:url => "/things",
|
97
|
+
})
|
82
98
|
list.filters = { :expand => ['data.source'], :limit => 3 }
|
83
99
|
@mock.expects(:get).with do |url, _, _|
|
84
100
|
u = URI.parse(url)
|
@@ -94,7 +110,11 @@ module Stripe
|
|
94
110
|
end
|
95
111
|
|
96
112
|
should "fetch an empty page through #next_page" do
|
97
|
-
list = TestListObject.construct_from({
|
113
|
+
list = TestListObject.construct_from({
|
114
|
+
:data => [{ :id => 1 }],
|
115
|
+
:has_more => false,
|
116
|
+
:url => "/things",
|
117
|
+
})
|
98
118
|
next_list = list.next_page
|
99
119
|
assert_equal Stripe::ListObject.empty_list, next_list
|
100
120
|
end
|
@@ -104,7 +124,10 @@ module Stripe
|
|
104
124
|
#
|
105
125
|
|
106
126
|
should "fetch a next page through #previous_page" do
|
107
|
-
list = TestListObject.construct_from({
|
127
|
+
list = TestListObject.construct_from({
|
128
|
+
:data => [{ :id => 2 }],
|
129
|
+
:url => "/things",
|
130
|
+
})
|
108
131
|
@mock.expects(:get).once.with("#{Stripe.api_base}/things?ending_before=2", nil, nil).
|
109
132
|
returns(make_response({ :data => [{ :id => 1 }] }))
|
110
133
|
next_list = list.previous_page
|
@@ -112,7 +135,10 @@ module Stripe
|
|
112
135
|
end
|
113
136
|
|
114
137
|
should "fetch a next page through #previous_page and respect limit" do
|
115
|
-
list = TestListObject.construct_from({
|
138
|
+
list = TestListObject.construct_from({
|
139
|
+
:data => [{ :id => 2 }],
|
140
|
+
:url => "/things",
|
141
|
+
})
|
116
142
|
list.filters = { :expand => ['data.source'], :limit => 3 }
|
117
143
|
@mock.expects(:get).with do |url, _, _|
|
118
144
|
# apparently URI.parse in 1.8.7 doesn't support query parameters ...
|
@@ -139,10 +165,10 @@ module Stripe
|
|
139
165
|
@mock.expects(:get).twice.returns(make_response(make_charge_array))
|
140
166
|
c = Stripe::Charge.all
|
141
167
|
assert c.kind_of?(Stripe::ListObject)
|
142
|
-
assert_equal('/v1/charges', c.
|
168
|
+
assert_equal('/v1/charges', c.resource_url)
|
143
169
|
all = c.all
|
144
170
|
assert all.kind_of?(Stripe::ListObject)
|
145
|
-
assert_equal('/v1/charges', all.
|
171
|
+
assert_equal('/v1/charges', all.resource_url)
|
146
172
|
assert all.data.kind_of?(Array)
|
147
173
|
end
|
148
174
|
end
|
@@ -150,7 +176,4 @@ end
|
|
150
176
|
|
151
177
|
# A helper class with a URL that allows us to try out pagination.
|
152
178
|
class TestListObject < Stripe::ListObject
|
153
|
-
def url
|
154
|
-
"/things"
|
155
|
-
end
|
156
179
|
end
|