stripe 1.20.3 → 1.20.4

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,3 +1,12 @@
1
+ === 1.20.4 2015-03-26
2
+
3
+ * Raise an error when explicitly passing nil as the API key on resource methods
4
+ * Fix error when passing an API key to Balance.retrieve (github issue #232)
5
+
6
+ === 1.20.3 2015-03-13
7
+
8
+ * Fixed error when updating certain resources (github issue #224)
9
+
1
10
  === 1.20.2 2015-03-10
2
11
 
3
12
  * Added support for updating nested hashes besides `metadata` (which was already supported)
data/VERSION CHANGED
@@ -1 +1 @@
1
- 1.20.3
1
+ 1.20.4
@@ -13,7 +13,8 @@ module Stripe
13
13
  end
14
14
 
15
15
  # @override To make id optional
16
- def self.retrieve(id=nil, opts={})
16
+ def self.retrieve(id=ARGUMENT_NOT_PROVIDED, opts={})
17
+ id = id.equal?(ARGUMENT_NOT_PROVIDED) ? nil : Util.check_string_argument!(id)
17
18
  # Account used to be a singleton, where this method's signature was `(opts={})`.
18
19
  # For the sake of not breaking folks who pass in an OAuth key in opts, let's lurkily
19
20
  # string match for it.
@@ -31,5 +32,7 @@ module Stripe
31
32
  opts.delete(:api_base) # the api_base here is a one-off, don't persist it
32
33
  Util.convert_to_stripe_object(response, opts)
33
34
  end
35
+
36
+ ARGUMENT_NOT_PROVIDED = Object.new
34
37
  end
35
38
  end
@@ -25,7 +25,7 @@ module Stripe
25
25
  refresh_from(response, opts)
26
26
  end
27
27
 
28
- def self.retrieve(id, opts=nil)
28
+ def self.retrieve(id, opts={})
29
29
  opts = Util.normalize_opts(opts)
30
30
  instance = self.new(id, opts)
31
31
  instance.refresh
@@ -12,7 +12,7 @@ module Stripe
12
12
  end
13
13
 
14
14
  def self.retrieve(opts={})
15
- instance = self.new(nil, opts)
15
+ instance = self.new(nil, Util.normalize_opts(opts))
16
16
  instance.refresh
17
17
  instance
18
18
  end
@@ -123,15 +123,24 @@ module Stripe
123
123
  # Turn this value into an api_key and a set of headers
124
124
  def self.normalize_opts(opts)
125
125
  case opts
126
- when NilClass
127
- {}
128
126
  when String
129
127
  {:api_key => opts}
130
128
  when Hash
129
+ check_api_key!(opts.fetch(:api_key)) if opts.has_key?(:api_key)
131
130
  opts.clone
132
131
  else
133
132
  raise TypeError.new('normalize_opts expects a string or a hash')
134
133
  end
135
134
  end
135
+
136
+ def self.check_string_argument!(key)
137
+ raise TypeError.new("argument must be a string") unless key.is_a?(String)
138
+ key
139
+ end
140
+
141
+ def self.check_api_key!(key)
142
+ raise TypeError.new("api_key must be a string") unless key.is_a?(String)
143
+ key
144
+ end
136
145
  end
137
146
  end
@@ -1,3 +1,3 @@
1
1
  module Stripe
2
- VERSION = '1.20.3'
2
+ VERSION = '1.20.4'
3
3
  end
@@ -2,7 +2,7 @@ require File.expand_path('../../test_helper', __FILE__)
2
2
 
3
3
  module Stripe
4
4
  class AccountTest < Test::Unit::TestCase
5
- should "account should be retrievable" do
5
+ should "be retrievable" do
6
6
  resp = {:email => "test+bindings@stripe.com", :charge_enabled => false, :details_submitted => false}
7
7
  @mock.expects(:get).
8
8
  once.
@@ -14,7 +14,7 @@ module Stripe
14
14
  assert !a.details_submitted
15
15
  end
16
16
 
17
- should "account should be retrievable via plural endpoint" do
17
+ should "be retrievable via plural endpoint" do
18
18
  resp = {:email => "test+bindings@stripe.com", :charge_enabled => false, :details_submitted => false}
19
19
  @mock.expects(:get).
20
20
  once.
@@ -26,6 +26,13 @@ module Stripe
26
26
  assert !a.details_submitted
27
27
  end
28
28
 
29
+ should "be retrievable using an API key as the only argument" do
30
+ account = mock
31
+ Stripe::Account.expects(:new).once.with(nil, {:api_key => 'sk_foobar'}).returns(account)
32
+ account.expects(:refresh).once
33
+ Stripe::Account.retrieve('sk_foobar')
34
+ end
35
+
29
36
  should "be updatable" do
30
37
  resp = {
31
38
  :id => 'acct_foo',
@@ -62,5 +69,14 @@ module Stripe
62
69
  end.returns(test_response({ 'stripe_user_id' => a.id }))
63
70
  a.deauthorize('ca_1234', 'sk_test_1234')
64
71
  end
72
+
73
+ should "reject nil api keys" do
74
+ assert_raise TypeError do
75
+ Stripe::Account.retrieve(nil)
76
+ end
77
+ assert_raise TypeError do
78
+ Stripe::Account.retrieve(:api_key => nil)
79
+ end
80
+ end
65
81
  end
66
82
  end
@@ -37,6 +37,15 @@ module Stripe
37
37
  end
38
38
  end
39
39
 
40
+ should "using a nil api key should raise an exception" do
41
+ assert_raises TypeError do
42
+ Stripe::Customer.all({}, nil)
43
+ end
44
+ assert_raises TypeError do
45
+ Stripe::Customer.all({}, { :api_key => nil })
46
+ end
47
+ end
48
+
40
49
  should "specifying api credentials containing whitespace should raise an exception" do
41
50
  Stripe.api_key = "key "
42
51
  assert_raises Stripe::AuthenticationError do
@@ -469,7 +478,14 @@ module Stripe
469
478
  }
470
479
  })
471
480
 
472
- @mock.expects(:post).once.with("#{Stripe.api_base}/v1/accounts/myid", nil, 'legal_entity[first_name]=Bob&legal_entity[last_name]=').returns(test_response({"id" => "myid"}))
481
+ @mock.expects(:post).once.with(
482
+ "#{Stripe.api_base}/v1/accounts/myid",
483
+ nil,
484
+ any_of(
485
+ 'legal_entity[first_name]=Bob&legal_entity[last_name]=',
486
+ 'legal_entity[last_name]=&legal_entity[first_name]=Bob'
487
+ )
488
+ ).returns(test_response({"id" => "myid"}))
473
489
 
474
490
  acct.legal_entity = {:first_name => 'Bob'}
475
491
  acct.save
@@ -25,5 +25,10 @@ module Stripe
25
25
  symbolized = Stripe::Util.symbolize_names(start)
26
26
  assert_equal(finish, symbolized)
27
27
  end
28
+
29
+ should "normalize_opts should reject nil keys" do
30
+ assert_raise { Stripe::Util.normalize_opts(nil) }
31
+ assert_raise { Stripe::Util.normalize_opts(:api_key => nil) }
32
+ end
28
33
  end
29
34
  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.20.3
4
+ version: 1.20.4
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: 2015-03-13 00:00:00.000000000 Z
13
+ date: 2015-03-27 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: rest-client