stripe 1.8.4 → 1.8.5

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,4 +1,11 @@
1
- === 1.8.3 2013-07-11
1
+ === 1.8.5 2013-08-12
2
+
3
+ * Add support for unsetting attributes by setting to nil.
4
+ Permits unsetting email and description on customers and description on charges.
5
+ Setting properties to a blank string is now an error.
6
+ * Attempting to set an object's id is now an error.
7
+
8
+ === 1.8.4 2013-07-11
2
9
 
3
10
  * Add support for new cards API (Stripe API version 2013-07-05)
4
11
 
data/VERSION CHANGED
@@ -1 +1 @@
1
- 1.8.4
1
+ 1.8.5
@@ -137,7 +137,7 @@ module Stripe
137
137
  @no_bundle = true
138
138
  end
139
139
 
140
- !(@no_verify || @no_nobundle)
140
+ !(@no_verify || @no_bundle)
141
141
  end
142
142
 
143
143
  def self.user_agent
@@ -3,8 +3,9 @@ module Stripe
3
3
  module Update
4
4
  def save
5
5
  if @unsaved_values.length > 0
6
- values = {}
7
- @unsaved_values.each { |k| values[k] = @values[k] }
6
+ values = @unsaved_values.reduce({}) do |h, k|
7
+ h.update(k => @values[k].nil? ? '' : @values[k])
8
+ end
8
9
  values.delete(:id)
9
10
  response, api_key = Stripe.request(:post, url, @api_key, values)
10
11
  refresh_from(response, api_key)
@@ -26,7 +26,7 @@ module Stripe
26
26
  # to have a unified inspect method
27
27
  @unsaved_values = Set.new
28
28
  @transient_values = Set.new
29
- self.id = id if id
29
+ @values[:id] = id if id
30
30
  end
31
31
 
32
32
  def self.construct_from(values, api_key=nil)
@@ -125,6 +125,12 @@ module Stripe
125
125
  k_eq = :"#{k}="
126
126
  define_method(k) { @values[k] }
127
127
  define_method(k_eq) do |v|
128
+ if v == ""
129
+ raise ArgumentError.new(
130
+ "You cannot set #{k} to an empty string." +
131
+ "We interpret empty strings as nil in requests." +
132
+ "You may set #{self}.#{k} = nil to delete the property.")
133
+ end
128
134
  @values[k] = v
129
135
  @unsaved_values.add(k)
130
136
  end
@@ -136,10 +142,13 @@ module Stripe
136
142
  # TODO: only allow setting in updateable classes.
137
143
  if name.to_s.end_with?('=')
138
144
  attr = name.to_s[0...-1].to_sym
139
- @values[attr] = args[0]
140
- @unsaved_values.add(attr)
141
145
  add_accessors([attr])
142
- return
146
+ begin
147
+ mth = method(name)
148
+ rescue NameError
149
+ raise NoMethodError.new("Cannot set #{attr} on this object. HINT: you can't set: #{@@permanent_attributes.to_a.join(', ')}")
150
+ end
151
+ return mth.call(args[0])
143
152
  else
144
153
  return @values[name] if @values.has_key?(name)
145
154
  end
@@ -1,3 +1,3 @@
1
1
  module Stripe
2
- VERSION = '1.8.4'
2
+ VERSION = '1.8.5'
3
3
  end
@@ -10,8 +10,6 @@ spec = Gem::Specification.new do |s|
10
10
  s.authors = ['Ross Boucher', 'Greg Brockman']
11
11
  s.email = ['boucher@stripe.com', 'gdb@stripe.com']
12
12
  s.homepage = 'https://stripe.com/api'
13
- s.executables = 'stripe-console'
14
- s.require_paths = %w{lib}
15
13
 
16
14
  s.add_dependency('rest-client', '~> 1.4')
17
15
  s.add_dependency('multi_json', '>= 1.0.4', '< 2')
@@ -240,7 +240,9 @@ class TestStripeRuby < Test::Unit::TestCase
240
240
  c = Stripe::Charge.all(:count => nil, :offset => 5, :sad => false)
241
241
 
242
242
  @mock.expects(:post).with do |url, api_key, params|
243
- url == "#{Stripe.api_base}/v1/charges" && api_key.nil? && CGI.parse(params) == { 'amount' => ['50'], 'currency' => ['usd'] }
243
+ url == "#{Stripe.api_base}/v1/charges" &&
244
+ api_key.nil? &&
245
+ CGI.parse(params) == { 'amount' => ['50'], 'currency' => ['usd'] }
244
246
  end.returns(test_response({ :count => 1, :data => [test_charge] }))
245
247
  c = Stripe::Charge.create(:amount => 50, :currency => 'usd', :card => { :number => nil })
246
248
  end
@@ -295,17 +297,17 @@ class TestStripeRuby < Test::Unit::TestCase
295
297
 
296
298
  should "updating an object should issue a POST request with only the changed properties" do
297
299
  @mock.expects(:post).with do |url, api_key, params|
298
- url == "#{Stripe.api_base}/v1/customers/c_test_customer" && api_key.nil? && CGI.parse(params) == {'mnemonic' => ['another_mn']}
300
+ url == "#{Stripe.api_base}/v1/customers/c_test_customer" && api_key.nil? && CGI.parse(params) == {'description' => ['another_mn']}
299
301
  end.once.returns(test_response(test_customer))
300
302
  c = Stripe::Customer.construct_from(test_customer)
301
- c.mnemonic = "another_mn"
303
+ c.description = "another_mn"
302
304
  c.save
303
305
  end
304
306
 
305
307
  should "updating should merge in returned properties" do
306
308
  @mock.expects(:post).once.returns(test_response(test_customer))
307
309
  c = Stripe::Customer.new("c_test_customer")
308
- c.mnemonic = "another_mn"
310
+ c.description = "another_mn"
309
311
  c.save
310
312
  assert_equal false, c.livemode
311
313
  end
@@ -394,7 +396,36 @@ class TestStripeRuby < Test::Unit::TestCase
394
396
  @mock.expects(:post).once.returns(test_response(test_charge))
395
397
  c = Stripe::Charge.new("test_charge")
396
398
  c.refresh
397
- c.mnemonic = "New charge description"
399
+ c.description = "New charge description"
400
+ c.save
401
+ end
402
+
403
+ should "charge id should not be changeable" do
404
+ @mock.expects(:get).once.returns(test_response(test_charge))
405
+ c = Stripe::Charge.new("test_charge")
406
+ c.refresh
407
+ assert_raises NoMethodError do
408
+ c.id = "my new id"
409
+ end
410
+ end
411
+
412
+ should "charge descriptions should not be settable to an empty string" do
413
+ @mock.expects(:get).once.returns(test_response(test_charge))
414
+ c = Stripe::Charge.new("test_charge")
415
+ c.refresh
416
+ assert_raises ArgumentError do
417
+ c.description = ""
418
+ end
419
+ end
420
+
421
+ should "charges descriptions should pass nil as an empty string" do
422
+ @mock.expects(:get).once.returns(test_response(test_charge))
423
+ @mock.expects(:post).once.with do |url, api_key, params|
424
+ params == 'description='
425
+ end.returns(test_response(test_charge))
426
+ c = Stripe::Charge.new("test_charge")
427
+ c.refresh
428
+ c.description = nil
398
429
  c.save
399
430
  end
400
431
 
@@ -445,13 +476,13 @@ class TestStripeRuby < Test::Unit::TestCase
445
476
  end
446
477
 
447
478
  should "customers should be updateable" do
448
- @mock.expects(:get).once.returns(test_response(test_customer({:mnemonic => "foo"})))
449
- @mock.expects(:post).once.returns(test_response(test_customer({:mnemonic => "bar"})))
479
+ @mock.expects(:get).once.returns(test_response(test_customer({:description => "foo"})))
480
+ @mock.expects(:post).once.returns(test_response(test_customer({:description => "bar"})))
450
481
  c = Stripe::Customer.new("test_customer").refresh
451
- assert_equal c.mnemonic, "foo"
452
- c.mnemonic = "bar"
482
+ assert_equal c.description, "foo"
483
+ c.description = "bar"
453
484
  c.save
454
- assert_equal c.mnemonic, "bar"
485
+ assert_equal c.description, "bar"
455
486
  end
456
487
 
457
488
  should "create should return a new customer" do
@@ -496,11 +527,11 @@ class TestStripeRuby < Test::Unit::TestCase
496
527
  end
497
528
 
498
529
  should "be able to update a customer without refreshing it first" do
499
- @mock.expects(:post).once.with("#{Stripe.api_base}/v1/customers/test_customer", nil, 'mnemonic=bar').returns(test_response(test_customer({:mnemonic => "bar"})))
530
+ @mock.expects(:post).once.with("#{Stripe.api_base}/v1/customers/test_customer", nil, 'description=bar').returns(test_response(test_customer({:description => "bar"})))
500
531
  c = Stripe::Customer.new("test_customer")
501
- c.mnemonic = "bar"
532
+ c.description = "bar"
502
533
  c.save
503
- assert_equal c.mnemonic, "bar"
534
+ assert_equal c.description, "bar"
504
535
  end
505
536
 
506
537
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: stripe
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.8.4
4
+ version: 1.8.5
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2013-07-12 00:00:00.000000000 Z
13
+ date: 2013-08-12 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: rest-client