stripe 1.20.3 → 1.20.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -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