stripe 3.3.2 → 3.4.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (117) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +1 -0
  3. data/.rubocop.yml +20 -0
  4. data/.rubocop_todo.yml +62 -0
  5. data/.travis.yml +1 -1
  6. data/Gemfile +19 -12
  7. data/History.txt +10 -0
  8. data/README.md +5 -1
  9. data/Rakefile +8 -5
  10. data/VERSION +1 -1
  11. data/bin/stripe-console +2 -2
  12. data/lib/stripe.rb +72 -74
  13. data/lib/stripe/account.rb +15 -17
  14. data/lib/stripe/alipay_account.rb +10 -7
  15. data/lib/stripe/api_operations/create.rb +1 -1
  16. data/lib/stripe/api_operations/delete.rb +1 -1
  17. data/lib/stripe/api_operations/list.rb +2 -2
  18. data/lib/stripe/api_operations/request.rb +5 -12
  19. data/lib/stripe/api_operations/save.rb +6 -6
  20. data/lib/stripe/api_resource.rb +7 -9
  21. data/lib/stripe/apple_pay_domain.rb +2 -2
  22. data/lib/stripe/application_fee.rb +5 -5
  23. data/lib/stripe/application_fee_refund.rb +5 -5
  24. data/lib/stripe/balance.rb +1 -1
  25. data/lib/stripe/balance_transaction.rb +2 -2
  26. data/lib/stripe/bank_account.rb +7 -7
  27. data/lib/stripe/bitcoin_receiver.rb +4 -2
  28. data/lib/stripe/bitcoin_transaction.rb +3 -1
  29. data/lib/stripe/card.rb +5 -5
  30. data/lib/stripe/charge.rb +18 -18
  31. data/lib/stripe/country_spec.rb +2 -2
  32. data/lib/stripe/coupon.rb +1 -1
  33. data/lib/stripe/customer.rb +23 -23
  34. data/lib/stripe/dispute.rb +3 -3
  35. data/lib/stripe/ephemeral_key.rb +4 -4
  36. data/lib/stripe/errors.rb +4 -4
  37. data/lib/stripe/event.rb +1 -1
  38. data/lib/stripe/file_upload.rb +5 -5
  39. data/lib/stripe/invoice.rb +7 -7
  40. data/lib/stripe/invoice_item.rb +1 -1
  41. data/lib/stripe/invoice_line_item.rb +1 -1
  42. data/lib/stripe/list_object.rb +14 -18
  43. data/lib/stripe/login_link.rb +3 -3
  44. data/lib/stripe/oauth.rb +15 -13
  45. data/lib/stripe/order.rb +5 -5
  46. data/lib/stripe/order_return.rb +1 -1
  47. data/lib/stripe/payout.rb +3 -3
  48. data/lib/stripe/plan.rb +1 -1
  49. data/lib/stripe/product.rb +1 -1
  50. data/lib/stripe/recipient.rb +3 -2
  51. data/lib/stripe/recipient_transfer.rb +1 -2
  52. data/lib/stripe/refund.rb +1 -1
  53. data/lib/stripe/reversal.rb +5 -5
  54. data/lib/stripe/singleton_api_resource.rb +3 -3
  55. data/lib/stripe/sku.rb +1 -1
  56. data/lib/stripe/source.rb +13 -10
  57. data/lib/stripe/stripe_client.rb +149 -169
  58. data/lib/stripe/stripe_object.rb +77 -76
  59. data/lib/stripe/subscription.rb +5 -5
  60. data/lib/stripe/subscription_item.rb +2 -2
  61. data/lib/stripe/three_d_secure.rb +1 -1
  62. data/lib/stripe/token.rb +1 -1
  63. data/lib/stripe/transfer.rb +3 -3
  64. data/lib/stripe/util.rb +77 -62
  65. data/lib/stripe/version.rb +1 -1
  66. data/lib/stripe/webhook.rb +14 -10
  67. data/stripe.gemspec +14 -14
  68. data/test/stripe/account_test.rb +69 -81
  69. data/test/stripe/alipay_account_test.rb +19 -1
  70. data/test/stripe/api_operations_test.rb +7 -7
  71. data/test/stripe/api_resource_test.rb +224 -260
  72. data/test/stripe/apple_pay_domain_test.rb +8 -8
  73. data/test/stripe/application_fee_refund_test.rb +8 -8
  74. data/test/stripe/application_fee_test.rb +3 -3
  75. data/test/stripe/balance_test.rb +2 -2
  76. data/test/stripe/bank_account_test.rb +9 -11
  77. data/test/stripe/charge_test.rb +11 -11
  78. data/test/stripe/country_spec_test.rb +4 -4
  79. data/test/stripe/coupon_test.rb +10 -10
  80. data/test/stripe/customer_card_test.rb +11 -15
  81. data/test/stripe/customer_test.rb +26 -27
  82. data/test/stripe/dispute_test.rb +8 -8
  83. data/test/stripe/ephemeral_key_test.rb +14 -14
  84. data/test/stripe/errors_test.rb +2 -2
  85. data/test/stripe/file_upload_test.rb +26 -28
  86. data/test/stripe/invoice_item_test.rb +14 -14
  87. data/test/stripe/invoice_line_item_test.rb +1 -1
  88. data/test/stripe/invoice_test.rb +37 -37
  89. data/test/stripe/list_object_test.rb +60 -76
  90. data/test/stripe/login_link_test.rb +14 -14
  91. data/test/stripe/oauth_test.rb +42 -50
  92. data/test/stripe/order_return_test.rb +5 -5
  93. data/test/stripe/order_test.rb +12 -12
  94. data/test/stripe/payout_test.rb +9 -9
  95. data/test/stripe/plan_test.rb +9 -9
  96. data/test/stripe/product_test.rb +8 -8
  97. data/test/stripe/recipient_test.rb +9 -10
  98. data/test/stripe/refund_test.rb +9 -9
  99. data/test/stripe/reversal_test.rb +10 -10
  100. data/test/stripe/sku_test.rb +8 -8
  101. data/test/stripe/source_test.rb +14 -16
  102. data/test/stripe/stripe_client_test.rb +235 -266
  103. data/test/stripe/stripe_object_test.rb +163 -147
  104. data/test/stripe/stripe_response_test.rb +4 -3
  105. data/test/stripe/subscription_item_test.rb +11 -11
  106. data/test/stripe/subscription_test.rb +14 -14
  107. data/test/stripe/three_d_secure_test.rb +2 -2
  108. data/test/stripe/transfer_test.rb +8 -8
  109. data/test/stripe/util_test.rb +59 -57
  110. data/test/stripe/webhook_test.rb +18 -16
  111. data/test/stripe_test.rb +4 -4
  112. data/test/test_data.rb +26 -26
  113. data/test/test_helper.rb +29 -25
  114. metadata +6 -10
  115. data/test/stripe/bitcoin_receiver_test.rb +0 -67
  116. data/test/stripe/bitcoin_transaction_test.rb +0 -19
  117. data/test/stripe/recipient_card_test.rb +0 -44
@@ -1,3 +1,3 @@
1
1
  module Stripe
2
- VERSION = '3.3.2'
2
+ VERSION = "3.4.1".freeze
3
3
  end
@@ -19,18 +19,18 @@ module Stripe
19
19
  end
20
20
 
21
21
  module Signature
22
- EXPECTED_SCHEME = 'v1'
22
+ EXPECTED_SCHEME = "v1".freeze
23
23
 
24
24
  def self.compute_signature(payload, secret)
25
- OpenSSL::HMAC.hexdigest(OpenSSL::Digest.new('sha256'), secret, payload)
25
+ OpenSSL::HMAC.hexdigest(OpenSSL::Digest.new("sha256"), secret, payload)
26
26
  end
27
27
  private_class_method :compute_signature
28
28
 
29
29
  # Extracts the timestamp and the signature(s) with the desired scheme
30
30
  # from the header
31
31
  def self.get_timestamp_and_signatures(header, scheme)
32
- list_items = header.split(/,\s*/).map { |i| i.split('=', 2) }
33
- timestamp = Integer(list_items.select { |i| i[0] == 't' }[0][1])
32
+ list_items = header.split(/,\s*/).map { |i| i.split("=", 2) }
33
+ timestamp = Integer(list_items.select { |i| i[0] == "t" }[0][1])
34
34
  signatures = list_items.select { |i| i[0] == scheme }.map { |i| i[1] }
35
35
  [timestamp, signatures]
36
36
  end
@@ -49,30 +49,34 @@ module Stripe
49
49
  def self.verify_header(payload, header, secret, tolerance: nil)
50
50
  begin
51
51
  timestamp, signatures = get_timestamp_and_signatures(header, EXPECTED_SCHEME)
52
- rescue
52
+ rescue StandardError
53
53
  raise SignatureVerificationError.new(
54
54
  "Unable to extract timestamp and signatures from header",
55
- header, http_body: payload)
55
+ header, http_body: payload
56
+ )
56
57
  end
57
58
 
58
59
  if signatures.empty?
59
60
  raise SignatureVerificationError.new(
60
61
  "No signatures found with expected scheme #{EXPECTED_SCHEME}",
61
- header, http_body: payload)
62
+ header, http_body: payload
63
+ )
62
64
  end
63
65
 
64
66
  signed_payload = "#{timestamp}.#{payload}"
65
67
  expected_sig = compute_signature(signed_payload, secret)
66
- unless signatures.any? {|s| Util.secure_compare(expected_sig, s)}
68
+ unless signatures.any? { |s| Util.secure_compare(expected_sig, s) }
67
69
  raise SignatureVerificationError.new(
68
70
  "No signatures found matching the expected signature for payload",
69
- header, http_body: payload)
71
+ header, http_body: payload
72
+ )
70
73
  end
71
74
 
72
75
  if tolerance && timestamp < Time.now.to_f - tolerance
73
76
  raise SignatureVerificationError.new(
74
77
  "Timestamp outside the tolerance zone (#{Time.at(timestamp)})",
75
- header, http_body: payload)
78
+ header, http_body: payload
79
+ )
76
80
  end
77
81
 
78
82
  true
data/stripe.gemspec CHANGED
@@ -1,22 +1,22 @@
1
- $:.unshift(File.join(File.dirname(__FILE__), 'lib'))
1
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), "lib"))
2
2
 
3
- require 'stripe/version'
3
+ require "stripe/version"
4
4
 
5
- spec = Gem::Specification.new do |s|
6
- s.name = 'stripe'
5
+ Gem::Specification.new do |s|
6
+ s.name = "stripe"
7
7
  s.version = Stripe::VERSION
8
- s.required_ruby_version = '>= 2.0.0'
9
- s.summary = 'Ruby bindings for the Stripe API'
10
- s.description = 'Stripe is the easiest way to accept payments online. See https://stripe.com for details.'
11
- s.author = 'Stripe'
12
- s.email = 'support@stripe.com'
13
- s.homepage = 'https://stripe.com/docs/api/ruby'
14
- s.license = 'MIT'
8
+ s.required_ruby_version = ">= 2.0.0"
9
+ s.summary = "Ruby bindings for the Stripe API"
10
+ s.description = "Stripe is the easiest way to accept payments online. See https://stripe.com for details."
11
+ s.author = "Stripe"
12
+ s.email = "support@stripe.com"
13
+ s.homepage = "https://stripe.com/docs/api/ruby"
14
+ s.license = "MIT"
15
15
 
16
- s.add_dependency('faraday', '~> 0.9')
16
+ s.add_dependency("faraday", "~> 0.10")
17
17
 
18
18
  s.files = `git ls-files`.split("\n")
19
19
  s.test_files = `git ls-files -- test/*`.split("\n")
20
- s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
21
- s.require_paths = ['lib']
20
+ s.executables = `git ls-files -- bin/*`.split("\n").map { |f| File.basename(f) }
21
+ s.require_paths = ["lib"]
22
22
  end
@@ -1,62 +1,62 @@
1
- require File.expand_path('../../test_helper', __FILE__)
1
+ require File.expand_path("../../test_helper", __FILE__)
2
2
 
3
3
  module Stripe
4
4
  class AccountTest < Test::Unit::TestCase
5
5
  should "be listable" do
6
6
  accounts = Stripe::Account.list
7
7
  assert_requested :get, "#{Stripe.api_base}/v1/accounts"
8
- assert accounts.data.kind_of?(Array)
9
- assert accounts.data[0].kind_of?(Stripe::Account)
8
+ assert accounts.data.is_a?(Array)
9
+ assert accounts.data[0].is_a?(Stripe::Account)
10
10
  end
11
11
 
12
12
  should "be retrievable using singular endpoint" do
13
13
  account = Stripe::Account.retrieve
14
14
  assert_requested :get, "#{Stripe.api_base}/v1/account"
15
- assert account.kind_of?(Stripe::Account)
15
+ assert account.is_a?(Stripe::Account)
16
16
  end
17
17
 
18
18
  should "be retrievable using plural endpoint" do
19
19
  account = Stripe::Account.retrieve("acct_123")
20
20
  assert_requested :get, "#{Stripe.api_base}/v1/accounts/acct_123"
21
- assert account.kind_of?(Stripe::Account)
21
+ assert account.is_a?(Stripe::Account)
22
22
  end
23
23
 
24
24
  should "be rejectable" do
25
- account_data = {:id => 'acct_foo'}
26
- stub_request(:get, "#{Stripe.api_base}/v1/accounts/acct_foo").
27
- to_return(body: JSON.generate(account_data))
25
+ account_data = { id: "acct_foo" }
26
+ stub_request(:get, "#{Stripe.api_base}/v1/accounts/acct_foo")
27
+ .to_return(body: JSON.generate(account_data))
28
28
 
29
- stub_request(:post, "#{Stripe.api_base}/v1/accounts/acct_foo/reject").
30
- to_return(body: JSON.generate(account_data))
29
+ stub_request(:post, "#{Stripe.api_base}/v1/accounts/acct_foo/reject")
30
+ .to_return(body: JSON.generate(account_data))
31
31
 
32
- account = Stripe::Account.retrieve('acct_foo')
33
- account.reject(:reason => 'fraud')
32
+ account = Stripe::Account.retrieve("acct_foo")
33
+ account.reject(reason: "fraud")
34
34
  end
35
35
 
36
36
  should "be creatable" do
37
- account = Stripe::Account.create(:metadata => {}, :type => 'standard')
37
+ account = Stripe::Account.create(metadata: {}, type: "standard")
38
38
  assert_requested :post, "#{Stripe.api_base}/v1/accounts"
39
- assert account.kind_of?(Stripe::Account)
39
+ assert account.is_a?(Stripe::Account)
40
40
  end
41
41
 
42
42
  should "be saveable" do
43
43
  account = Stripe::Account.retrieve("acct_123")
44
- account.metadata['key'] = 'value'
44
+ account.metadata["key"] = "value"
45
45
  account.save
46
46
  assert_requested :post, "#{Stripe.api_base}/v1/accounts/#{account.id}"
47
47
  end
48
48
 
49
49
  should "be updateable" do
50
- account = Stripe::Account.update("acct_123", metadata: {foo: 'bar'})
50
+ account = Stripe::Account.update("acct_123", metadata: { foo: "bar" })
51
51
  assert_requested :post, "#{Stripe.api_base}/v1/accounts/acct_123"
52
- assert account.kind_of?(Stripe::Account)
52
+ assert account.is_a?(Stripe::Account)
53
53
  end
54
54
 
55
55
  should "be deletable" do
56
56
  account = Stripe::Account.retrieve("acct_123")
57
57
  account = account.delete
58
58
  assert_requested :delete, "#{Stripe.api_base}/v1/accounts/#{account.id}"
59
- assert account.kind_of?(Stripe::Account)
59
+ assert account.is_a?(Stripe::Account)
60
60
  end
61
61
 
62
62
  context "#bank_account=" do
@@ -66,8 +66,8 @@ module Stripe
66
66
  begin
67
67
  account = Stripe::Account.retrieve("acct_123")
68
68
  account.bank_account = "tok_123"
69
- message = "NOTE: Stripe::Account#bank_account= is " +
70
- "deprecated; use #external_account= instead"
69
+ message = "NOTE: Stripe::Account#bank_account= is " \
70
+ "deprecated; use #external_account= instead"
71
71
  assert_match Regexp.new(message), $stderr.string
72
72
  ensure
73
73
  $stderr = old_stderr
@@ -81,93 +81,85 @@ module Stripe
81
81
 
82
82
  # Unfortunately, the OpenAPI spec doesn't yet cover anything under the
83
83
  # Connect endpoints, so for just stub this out with Webmock.
84
- stub_request(:post, "#{Stripe.connect_base}/oauth/deauthorize").
85
- with(body: { 'client_id' => 'ca_1234', 'stripe_user_id' => account.id}).
86
- to_return(body: JSON.generate({ 'stripe_user_id' => account.id }))
87
- account.deauthorize('ca_1234', 'sk_test_1234')
84
+ stub_request(:post, "#{Stripe.connect_base}/oauth/deauthorize")
85
+ .with(body: { "client_id" => "ca_1234", "stripe_user_id" => account.id })
86
+ .to_return(body: JSON.generate("stripe_user_id" => account.id))
87
+ account.deauthorize("ca_1234", "sk_test_1234")
88
88
  end
89
89
  end
90
90
 
91
91
  context "#legal_entity=" do
92
- should 'disallow direct overrides' do
92
+ should "disallow direct overrides" do
93
93
  account = Stripe::Account.retrieve("acct_123")
94
94
 
95
95
  assert_raise NoMethodError do
96
- account.legal_entity = {:first_name => 'Blah'}
96
+ account.legal_entity = { first_name: "Blah" }
97
97
  end
98
98
 
99
- account.legal_entity.first_name = 'Blah'
99
+ account.legal_entity.first_name = "Blah"
100
100
  end
101
101
  end
102
102
 
103
103
  context "#serialize_params" do
104
104
  should "serialize an a new additional_owners" do
105
105
  obj = Stripe::Util.convert_to_stripe_object({
106
- :object => "account",
107
- :legal_entity => Stripe::StripeObject.construct_from({
106
+ object: "account",
107
+ legal_entity: Stripe::StripeObject.construct_from({
108
108
  }),
109
109
  }, {})
110
110
  obj.legal_entity.additional_owners = [
111
- { :first_name => "Joe" },
112
- { :first_name => "Jane" },
111
+ { first_name: "Joe" },
112
+ { first_name: "Jane" },
113
113
  ]
114
114
 
115
115
  expected = {
116
- :legal_entity => {
117
- :additional_owners => {
118
- "0" => { :first_name => "Joe" },
119
- "1" => { :first_name => "Jane" },
120
- }
121
- }
116
+ legal_entity: {
117
+ additional_owners: {
118
+ "0" => { first_name: "Joe" },
119
+ "1" => { first_name: "Jane" },
120
+ },
121
+ },
122
122
  }
123
123
  assert_equal(expected, obj.serialize_params)
124
124
  end
125
125
 
126
126
  should "serialize on an partially changed additional_owners" do
127
127
  obj = Stripe::Util.convert_to_stripe_object({
128
- :object => "account",
129
- :legal_entity => {
130
- :additional_owners => [
131
- Stripe::StripeObject.construct_from({
132
- :first_name => "Joe"
133
- }),
134
- Stripe::StripeObject.construct_from({
135
- :first_name => "Jane"
136
- }),
137
- ]
138
- }
128
+ object: "account",
129
+ legal_entity: {
130
+ additional_owners: [
131
+ Stripe::StripeObject.construct_from(first_name: "Joe"),
132
+ Stripe::StripeObject.construct_from(first_name: "Jane"),
133
+ ],
134
+ },
139
135
  }, {})
140
136
  obj.legal_entity.additional_owners[1].first_name = "Stripe"
141
137
 
142
138
  expected = {
143
- :legal_entity => {
144
- :additional_owners => {
145
- "1" => { :first_name => "Stripe" }
146
- }
147
- }
139
+ legal_entity: {
140
+ additional_owners: {
141
+ "1" => { first_name: "Stripe" },
142
+ },
143
+ },
148
144
  }
149
145
  assert_equal(expected, obj.serialize_params)
150
146
  end
151
147
 
152
148
  should "serialize on an unchanged additional_owners" do
153
149
  obj = Stripe::Util.convert_to_stripe_object({
154
- :object => "account",
155
- :legal_entity => {
156
- :additional_owners => [
157
- Stripe::StripeObject.construct_from({
158
- :first_name => "Joe"
159
- }),
160
- Stripe::StripeObject.construct_from({
161
- :first_name => "Jane"
162
- }),
163
- ]
164
- }
150
+ object: "account",
151
+ legal_entity: {
152
+ additional_owners: [
153
+ Stripe::StripeObject.construct_from(first_name: "Joe"),
154
+ Stripe::StripeObject.construct_from(first_name: "Jane"),
155
+ ],
156
+ },
165
157
  }, {})
166
158
 
167
159
  expected = {
168
- :legal_entity => {
169
- :additional_owners => {}
170
- }
160
+ legal_entity: {
161
+ additional_owners: {},
162
+ },
171
163
  }
172
164
  assert_equal(expected, obj.serialize_params)
173
165
  end
@@ -176,24 +168,20 @@ module Stripe
176
168
  # meaning for the server, which interprets it as an array unset.
177
169
  should "serialize on an unset additional_owners" do
178
170
  obj = Stripe::Util.convert_to_stripe_object({
179
- :object => "account",
180
- :legal_entity => {
181
- :additional_owners => [
182
- Stripe::StripeObject.construct_from({
183
- :first_name => "Joe"
184
- }),
185
- Stripe::StripeObject.construct_from({
186
- :first_name => "Jane"
187
- }),
188
- ]
189
- }
171
+ object: "account",
172
+ legal_entity: {
173
+ additional_owners: [
174
+ Stripe::StripeObject.construct_from(first_name: "Joe"),
175
+ Stripe::StripeObject.construct_from(first_name: "Jane"),
176
+ ],
177
+ },
190
178
  }, {})
191
179
  obj.legal_entity.additional_owners = nil
192
180
 
193
181
  expected = {
194
- :legal_entity => {
195
- :additional_owners => ""
196
- }
182
+ legal_entity: {
183
+ additional_owners: "",
184
+ },
197
185
  }
198
186
  assert_equal(expected, obj.serialize_params)
199
187
  end
@@ -1,7 +1,25 @@
1
- require File.expand_path('../../test_helper', __FILE__)
1
+ require File.expand_path("../../test_helper", __FILE__)
2
2
 
3
3
  module Stripe
4
4
  class AlipayAccountTest < Test::Unit::TestCase
5
+ context "#resource_url" do
6
+ should "return a resource URL" do
7
+ alipay_account = Stripe::AlipayAccount.construct_from(
8
+ id: "aliacc_123",
9
+ customer: "cus_123"
10
+ )
11
+ assert_equal "/v1/customers/cus_123/sources/aliacc_123",
12
+ alipay_account.resource_url
13
+ end
14
+
15
+ should "raise without a customer" do
16
+ alipay_account = Stripe::AlipayAccount.construct_from(id: "aliacc_123")
17
+ assert_raises NotImplementedError do
18
+ alipay_account.resource_url
19
+ end
20
+ end
21
+ end
22
+
5
23
  should "raise on #retrieve" do
6
24
  assert_raises NotImplementedError do
7
25
  Stripe::AlipayAccount.retrieve("aliacc_123")
@@ -1,5 +1,5 @@
1
1
  # -*- coding: utf-8 -*-
2
- require File.expand_path('../../test_helper', __FILE__)
2
+ require File.expand_path("../../test_helper", __FILE__)
3
3
 
4
4
  module Stripe
5
5
  class ApiOperationsTest < Test::Unit::TestCase
@@ -13,16 +13,16 @@ module Stripe
13
13
 
14
14
  context ".update" do
15
15
  should "post the correct parameters to the resource URL" do
16
- stub_request(:post, "#{Stripe.api_base}/v1/updateableresources/id").
17
- with(body: { foo: "bar" }).
18
- to_return(body: JSON.generate({ foo: "bar" }))
19
- resource = UpdateableResource::update("id", { foo: "bar" })
20
- assert_equal('bar', resource.foo)
16
+ stub_request(:post, "#{Stripe.api_base}/v1/updateableresources/id")
17
+ .with(body: { foo: "bar" })
18
+ .to_return(body: JSON.generate(foo: "bar"))
19
+ resource = UpdateableResource.update("id", foo: "bar")
20
+ assert_equal("bar", resource.foo)
21
21
  end
22
22
 
23
23
  should "error on protected fields" do
24
24
  e = assert_raises do
25
- UpdateableResource::update("id", { protected: "bar" })
25
+ UpdateableResource.update("id", protected: "bar")
26
26
  end
27
27
  assert_equal "Cannot update protected field: protected", e.message
28
28
  end
@@ -1,5 +1,5 @@
1
1
  # -*- coding: utf-8 -*-
2
- require File.expand_path('../../test_helper', __FILE__)
2
+ require File.expand_path("../../test_helper", __FILE__)
3
3
 
4
4
  module Stripe
5
5
  class ApiResourceTest < Test::Unit::TestCase
@@ -17,7 +17,7 @@ module Stripe
17
17
  should "set a flag if given an object source" do
18
18
  r = NestedTestAPIResource.new("test_resource")
19
19
  r.external_account = {
20
- :object => 'card'
20
+ object: "card",
21
21
  }
22
22
  assert_equal true, r.external_account.save_with_parent
23
23
  end
@@ -29,17 +29,15 @@ module Stripe
29
29
  end
30
30
 
31
31
  should "creating a new APIResource from a hash should not fetch over the network" do
32
- Stripe::Customer.construct_from({
33
- :id => "somecustomer",
34
- :card => {:id => "somecard", :object => "card"},
35
- :object => "customer"
36
- })
32
+ Stripe::Customer.construct_from(id: "somecustomer",
33
+ card: { id: "somecard", object: "card" },
34
+ object: "customer")
37
35
  assert_not_requested :get, %r{#{Stripe.api_base}/.*}
38
36
  end
39
37
 
40
38
  should "setting an attribute should not cause a network request" do
41
- c = Stripe::Customer.new("cus_123");
42
- c.card = {:id => "somecard", :object => "card"}
39
+ c = Stripe::Customer.new("cus_123")
40
+ c.card = { id: "somecard", object: "card" }
43
41
  assert_not_requested :get, %r{#{Stripe.api_base}/.*}
44
42
  assert_not_requested :post, %r{#{Stripe.api_base}/.*}
45
43
  end
@@ -62,7 +60,7 @@ module Stripe
62
60
  Stripe::Customer.list({}, nil)
63
61
  end
64
62
  assert_raises TypeError do
65
- Stripe::Customer.list({}, { :api_key => nil })
63
+ Stripe::Customer.list({}, api_key: nil)
66
64
  end
67
65
  end
68
66
 
@@ -74,43 +72,43 @@ module Stripe
74
72
  end
75
73
 
76
74
  should "send expand on fetch properly" do
77
- stub_request(:get, "#{Stripe.api_base}/v1/charges/ch_123").
78
- with(query: { "expand" => ["customer"] }).
79
- to_return(body: JSON.generate(charge_fixture))
75
+ stub_request(:get, "#{Stripe.api_base}/v1/charges/ch_123")
76
+ .with(query: { "expand" => ["customer"] })
77
+ .to_return(body: JSON.generate(charge_fixture))
80
78
 
81
- Stripe::Charge.retrieve({:id => 'ch_123', :expand => [:customer]})
79
+ Stripe::Charge.retrieve(id: "ch_123", expand: [:customer])
82
80
  end
83
81
 
84
82
  should "preserve expand across refreshes" do
85
- stub_request(:get, "#{Stripe.api_base}/v1/charges/ch_123").
86
- with(query: { "expand" => ["customer"] }).
87
- to_return(body: JSON.generate(charge_fixture))
83
+ stub_request(:get, "#{Stripe.api_base}/v1/charges/ch_123")
84
+ .with(query: { "expand" => ["customer"] })
85
+ .to_return(body: JSON.generate(charge_fixture))
88
86
 
89
- ch = Stripe::Charge.retrieve({:id => 'ch_123', :expand => :customer})
87
+ ch = Stripe::Charge.retrieve(id: "ch_123", expand: :customer)
90
88
  ch.refresh
91
89
  end
92
90
 
93
91
  should "send expand when fetching through ListObject" do
94
- stub_request(:get, "#{Stripe.api_base}/v1/customers/cus_123").
95
- to_return(body: JSON.generate(customer_fixture))
92
+ stub_request(:get, "#{Stripe.api_base}/v1/customers/cus_123")
93
+ .to_return(body: JSON.generate(customer_fixture))
96
94
 
97
- stub_request(:get, "#{Stripe.api_base}/v1/customers/cus_123/sources/cc_test_card").
98
- with(query: { "expand" => ["customer"] }).
99
- to_return(body: JSON.generate(customer_fixture))
95
+ stub_request(:get, "#{Stripe.api_base}/v1/customers/cus_123/sources/cc_test_card")
96
+ .with(query: { "expand" => ["customer"] })
97
+ .to_return(body: JSON.generate(customer_fixture))
100
98
 
101
- customer = Stripe::Customer.retrieve('cus_123')
102
- customer.sources.retrieve({:id => 'cc_test_card', :expand => :customer})
99
+ customer = Stripe::Customer.retrieve("cus_123")
100
+ customer.sources.retrieve(id: "cc_test_card", expand: :customer)
103
101
  end
104
102
 
105
103
  context "when specifying per-object credentials" do
106
104
  context "with no global API key set" do
107
105
  should "use the per-object credential when creating" do
108
- stub_request(:post, "#{Stripe.api_base}/v1/charges").
109
- with(headers: {"Authorization" => "Bearer sk_test_local"}).
110
- to_return(body: JSON.generate(charge_fixture))
106
+ stub_request(:post, "#{Stripe.api_base}/v1/charges")
107
+ .with(headers: { "Authorization" => "Bearer sk_test_local" })
108
+ .to_return(body: JSON.generate(charge_fixture))
111
109
 
112
- Stripe::Charge.create({:source => 'tok_visa'},
113
- 'sk_test_local')
110
+ Stripe::Charge.create({ source: "tok_visa" },
111
+ "sk_test_local")
114
112
  end
115
113
  end
116
114
 
@@ -124,23 +122,23 @@ module Stripe
124
122
  end
125
123
 
126
124
  should "use the per-object credential when creating" do
127
- stub_request(:post, "#{Stripe.api_base}/v1/charges").
128
- with(headers: {"Authorization" => "Bearer sk_test_local"}).
129
- to_return(body: JSON.generate(charge_fixture))
125
+ stub_request(:post, "#{Stripe.api_base}/v1/charges")
126
+ .with(headers: { "Authorization" => "Bearer sk_test_local" })
127
+ .to_return(body: JSON.generate(charge_fixture))
130
128
 
131
- Stripe::Charge.create({:source => 'tok_visa'},
132
- 'sk_test_local')
129
+ Stripe::Charge.create({ source: "tok_visa" },
130
+ "sk_test_local")
133
131
  end
134
132
 
135
133
  should "use the per-object credential when retrieving and making other calls" do
136
- stub_request(:get, "#{Stripe.api_base}/v1/charges/ch_123").
137
- with(headers: {"Authorization" => "Bearer sk_test_local"}).
138
- to_return(body: JSON.generate(charge_fixture))
139
- stub_request(:post, "#{Stripe.api_base}/v1/charges/ch_123/refunds").
140
- with(headers: {"Authorization" => "Bearer sk_test_local"}).
141
- to_return(body: "{}")
142
-
143
- ch = Stripe::Charge.retrieve('ch_123', 'sk_test_local')
134
+ stub_request(:get, "#{Stripe.api_base}/v1/charges/ch_123")
135
+ .with(headers: { "Authorization" => "Bearer sk_test_local" })
136
+ .to_return(body: JSON.generate(charge_fixture))
137
+ stub_request(:post, "#{Stripe.api_base}/v1/charges/ch_123/refunds")
138
+ .with(headers: { "Authorization" => "Bearer sk_test_local" })
139
+ .to_return(body: "{}")
140
+
141
+ ch = Stripe::Charge.retrieve("ch_123", "sk_test_local")
144
142
  ch.refunds.create
145
143
  end
146
144
  end
@@ -148,52 +146,46 @@ module Stripe
148
146
 
149
147
  context "with valid credentials" do
150
148
  should "urlencode values in GET params" do
151
- stub_request(:get, "#{Stripe.api_base}/v1/charges").
152
- with(query: { customer: "test customer" }).
153
- to_return(body: JSON.generate({
154
- data: [charge_fixture]
155
- }))
156
- charges = Stripe::Charge.list(:customer => 'test customer').data
157
- assert charges.kind_of? Array
149
+ stub_request(:get, "#{Stripe.api_base}/v1/charges")
150
+ .with(query: { customer: "test customer" })
151
+ .to_return(body: JSON.generate(data: [charge_fixture]))
152
+ charges = Stripe::Charge.list(customer: "test customer").data
153
+ assert charges.is_a? Array
158
154
  end
159
155
 
160
156
  should "construct URL properly with base query parameters" do
161
- stub_request(:get, "#{Stripe.api_base}/v1/charges").
162
- with(query: { customer: "cus_123" }).
163
- to_return(body: JSON.generate({
164
- data: [charge_fixture],
165
- url: "/v1/charges"
166
- }))
167
- charges = Stripe::Invoice.list(:customer => 'cus_123')
168
-
169
- stub_request(:get, "#{Stripe.api_base}/v1/charges").
170
- with(query: { customer: "cus_123", created: "123" }).
171
- to_return(body: JSON.generate({
172
- data: [charge_fixture],
173
- url: "/v1/charges"
174
- }))
175
- charges.list(:created => 123)
157
+ stub_request(:get, "#{Stripe.api_base}/v1/charges")
158
+ .with(query: { customer: "cus_123" })
159
+ .to_return(body: JSON.generate(data: [charge_fixture],
160
+ url: "/v1/charges"))
161
+ charges = Stripe::Invoice.list(customer: "cus_123")
162
+
163
+ stub_request(:get, "#{Stripe.api_base}/v1/charges")
164
+ .with(query: { customer: "cus_123", created: "123" })
165
+ .to_return(body: JSON.generate(data: [charge_fixture],
166
+ url: "/v1/charges"))
167
+ charges.list(created: 123)
176
168
  end
177
169
 
178
170
  should "setting a nil value for a param should exclude that param from the request" do
179
- stub_request(:get, "#{Stripe.api_base}/v1/charges").
180
- with(query: { offset: 5, sad: false }).
181
- to_return(body: JSON.generate({ :count => 1, :data => [charge_fixture] }))
182
- Stripe::Charge.list(:count => nil, :offset => 5, :sad => false)
171
+ stub_request(:get, "#{Stripe.api_base}/v1/charges")
172
+ .with(query: { offset: 5, sad: false })
173
+ .to_return(body: JSON.generate(count: 1, data: [charge_fixture]))
174
+ Stripe::Charge.list(count: nil, offset: 5, sad: false)
183
175
 
184
- stub_request(:post, "#{Stripe.api_base}/v1/charges").
185
- with(body: { 'amount' => '50', 'currency' => 'usd' }).
186
- to_return(body: JSON.generate({ :count => 1, :data => [charge_fixture] }))
187
- Stripe::Charge.create(:amount => 50, :currency => 'usd', :card => { :number => nil })
176
+ stub_request(:post, "#{Stripe.api_base}/v1/charges")
177
+ .with(body: { "amount" => "50", "currency" => "usd" })
178
+ .to_return(body: JSON.generate(count: 1, data: [charge_fixture]))
179
+ Stripe::Charge.create(amount: 50, currency: "usd", card: { number: nil })
188
180
  end
189
181
 
190
182
  should "not trigger a warning if a known opt, such as idempotency_key, is in opts" do
191
- stub_request(:post, "#{Stripe.api_base}/v1/charges").
192
- to_return(body: JSON.generate(charge_fixture))
183
+ stub_request(:post, "#{Stripe.api_base}/v1/charges")
184
+ .to_return(body: JSON.generate(charge_fixture))
193
185
  old_stderr = $stderr
194
186
  $stderr = StringIO.new
195
187
  begin
196
- Stripe::Charge.create({ :amount => 100, :currency => 'usd', :card => 'sc_token' }, { :idempotency_key => '12345' })
188
+ Stripe::Charge.create({ amount: 100, currency: "usd", card: "sc_token" }, idempotency_key: "12345")
197
189
  assert $stderr.string.empty?
198
190
  ensure
199
191
  $stderr = old_stderr
@@ -201,21 +193,21 @@ module Stripe
201
193
  end
202
194
 
203
195
  should "trigger a warning if a known opt, such as idempotency_key, is in params" do
204
- stub_request(:post, "#{Stripe.api_base}/v1/charges").
205
- to_return(body: JSON.generate(charge_fixture))
196
+ stub_request(:post, "#{Stripe.api_base}/v1/charges")
197
+ .to_return(body: JSON.generate(charge_fixture))
206
198
  old_stderr = $stderr
207
199
  $stderr = StringIO.new
208
200
  begin
209
- Stripe::Charge.create({ :amount => 100, :currency => 'usd', :card => 'sc_token', :idempotency_key => '12345' })
210
- assert_match Regexp.new('WARNING:'), $stderr.string
201
+ Stripe::Charge.create(amount: 100, currency: "usd", card: "sc_token", idempotency_key: "12345")
202
+ assert_match Regexp.new("WARNING:"), $stderr.string
211
203
  ensure
212
204
  $stderr = old_stderr
213
205
  end
214
206
  end
215
207
 
216
208
  should "requesting with a unicode ID should result in a request" do
217
- stub_request(:get, "#{Stripe.api_base}/v1/customers/%E2%98%83").
218
- to_return(body: JSON.generate(make_missing_id_error), status: 404)
209
+ stub_request(:get, "#{Stripe.api_base}/v1/customers/%E2%98%83")
210
+ .to_return(body: JSON.generate(make_missing_id_error), status: 404)
219
211
  c = Stripe::Customer.new("☃")
220
212
  assert_raises(Stripe::InvalidRequestError) { c.refresh }
221
213
  end
@@ -226,58 +218,58 @@ module Stripe
226
218
  end
227
219
 
228
220
  should "making a GET request with parameters should have a query string and no body" do
229
- stub_request(:get, "#{Stripe.api_base}/v1/charges").
230
- with(query: { limit: 1 }).
231
- to_return(body: JSON.generate({ :data => [charge_fixture] }))
232
- Stripe::Charge.list({ :limit => 1 })
221
+ stub_request(:get, "#{Stripe.api_base}/v1/charges")
222
+ .with(query: { limit: 1 })
223
+ .to_return(body: JSON.generate(data: [charge_fixture]))
224
+ Stripe::Charge.list(limit: 1)
233
225
  end
234
226
 
235
227
  should "making a POST request with parameters should have a body and no query string" do
236
- stub_request(:post, "#{Stripe.api_base}/v1/charges").
237
- with(body: {'amount' => '100', 'currency' => 'usd', 'card' => 'sc_token'}).
238
- to_return(body: JSON.generate(charge_fixture))
239
- Stripe::Charge.create({ :amount => 100, :currency => 'usd', :card => 'sc_token' })
228
+ stub_request(:post, "#{Stripe.api_base}/v1/charges")
229
+ .with(body: { "amount" => "100", "currency" => "usd", "card" => "sc_token" })
230
+ .to_return(body: JSON.generate(charge_fixture))
231
+ Stripe::Charge.create(amount: 100, currency: "usd", card: "sc_token")
240
232
  end
241
233
 
242
234
  should "loading an object should issue a GET request" do
243
- stub_request(:get, "#{Stripe.api_base}/v1/charges/ch_123").
244
- to_return(body: JSON.generate(charge_fixture))
235
+ stub_request(:get, "#{Stripe.api_base}/v1/charges/ch_123")
236
+ .to_return(body: JSON.generate(charge_fixture))
245
237
  c = Stripe::Charge.new("ch_123")
246
238
  c.refresh
247
239
  end
248
240
 
249
241
  should "using array accessors should be the same as the method interface" do
250
- stub_request(:get, "#{Stripe.api_base}/v1/charges/ch_123").
251
- to_return(body: JSON.generate(charge_fixture))
242
+ stub_request(:get, "#{Stripe.api_base}/v1/charges/ch_123")
243
+ .to_return(body: JSON.generate(charge_fixture))
252
244
  c = Stripe::Charge.new("cus_123")
253
245
  c.refresh
254
246
  assert_equal c.created, c[:created]
255
- assert_equal c.created, c['created']
256
- c['created'] = 12345
257
- assert_equal c.created, 12345
247
+ assert_equal c.created, c["created"]
248
+ c["created"] = 12_345
249
+ assert_equal c.created, 12_345
258
250
  end
259
251
 
260
252
  should "accessing a property other than id or parent on an unfetched object should fetch it" do
261
- stub_request(:get, "#{Stripe.api_base}/v1/charges").
262
- with(query: { customer: "cus_123" }).
263
- to_return(body: JSON.generate(customer_fixture))
253
+ stub_request(:get, "#{Stripe.api_base}/v1/charges")
254
+ .with(query: { customer: "cus_123" })
255
+ .to_return(body: JSON.generate(customer_fixture))
264
256
  c = Stripe::Customer.new("cus_123")
265
257
  c.charges
266
258
  end
267
259
 
268
260
  should "updating an object should issue a POST request with only the changed properties" do
269
- stub_request(:post, "#{Stripe.api_base}/v1/customers/cus_123").
270
- with(body: { 'description' => 'another_mn' }).
271
- to_return(body: JSON.generate(customer_fixture))
261
+ stub_request(:post, "#{Stripe.api_base}/v1/customers/cus_123")
262
+ .with(body: { "description" => "another_mn" })
263
+ .to_return(body: JSON.generate(customer_fixture))
272
264
  c = Stripe::Customer.construct_from(customer_fixture)
273
265
  c.description = "another_mn"
274
266
  c.save
275
267
  end
276
268
 
277
269
  should "updating should merge in returned properties" do
278
- stub_request(:post, "#{Stripe.api_base}/v1/customers/cus_123").
279
- with(body: { 'description' => 'another_mn' }).
280
- to_return(body: JSON.generate(customer_fixture))
270
+ stub_request(:post, "#{Stripe.api_base}/v1/customers/cus_123")
271
+ .with(body: { "description" => "another_mn" })
272
+ .to_return(body: JSON.generate(customer_fixture))
281
273
  c = Stripe::Customer.new("cus_123")
282
274
  c.description = "another_mn"
283
275
  c.save
@@ -287,245 +279,221 @@ module Stripe
287
279
  should "updating should fail if api_key is overwritten with nil" do
288
280
  c = Stripe::Customer.new
289
281
  assert_raises TypeError do
290
- c.save({}, { :api_key => nil })
282
+ c.save({}, api_key: nil)
291
283
  end
292
284
  end
293
285
 
294
286
  should "updating should use the supplied api_key" do
295
- stub_request(:post, "#{Stripe.api_base}/v1/customers").
296
- with(headers: {"Authorization" => "Bearer sk_test_local"}).
297
- to_return(body: JSON.generate(customer_fixture))
287
+ stub_request(:post, "#{Stripe.api_base}/v1/customers")
288
+ .with(headers: { "Authorization" => "Bearer sk_test_local" })
289
+ .to_return(body: JSON.generate(customer_fixture))
298
290
  c = Stripe::Customer.new
299
- c.save({}, { :api_key => 'sk_test_local' })
291
+ c.save({}, api_key: "sk_test_local")
300
292
  assert_equal false, c.livemode
301
293
  end
302
294
 
303
295
  should "deleting should send no props and result in an object that has no props other deleted" do
304
- stub_request(:delete, "#{Stripe.api_base}/v1/customers/cus_123").
305
- to_return(body: JSON.generate({ "id" => "cus_123", "deleted" => true }))
296
+ stub_request(:delete, "#{Stripe.api_base}/v1/customers/cus_123")
297
+ .to_return(body: JSON.generate("id" => "cus_123", "deleted" => true))
306
298
  c = Stripe::Customer.construct_from(customer_fixture)
307
299
  c.delete
308
300
  end
309
301
 
310
302
  should "loading all of an APIResource should return an array of recursively instantiated objects" do
311
- stub_request(:get, "#{Stripe.api_base}/v1/charges").
312
- to_return(body: JSON.generate({
313
- data: [charge_fixture]
314
- }))
303
+ stub_request(:get, "#{Stripe.api_base}/v1/charges")
304
+ .to_return(body: JSON.generate(data: [charge_fixture]))
315
305
  charges = Stripe::Charge.list.data
316
- assert charges.kind_of? Array
317
- assert charges[0].kind_of? Stripe::Charge
318
- assert charges[0].source.kind_of?(Stripe::StripeObject)
306
+ assert charges.is_a? Array
307
+ assert charges[0].is_a? Stripe::Charge
308
+ assert charges[0].source.is_a?(Stripe::StripeObject)
319
309
  end
320
310
 
321
311
  should "passing in a stripe_account header should pass it through on call" do
322
- stub_request(:get, "#{Stripe.api_base}/v1/customers/cus_123").
323
- with(headers: {"Stripe-Account" => "acct_123"}).
324
- to_return(body: JSON.generate(customer_fixture))
325
- Stripe::Customer.retrieve("cus_123", {:stripe_account => 'acct_123'})
312
+ stub_request(:get, "#{Stripe.api_base}/v1/customers/cus_123")
313
+ .with(headers: { "Stripe-Account" => "acct_123" })
314
+ .to_return(body: JSON.generate(customer_fixture))
315
+ Stripe::Customer.retrieve("cus_123", stripe_account: "acct_123")
326
316
  end
327
317
 
328
318
  should "passing in a stripe_account header should pass it through on save" do
329
- stub_request(:get, "#{Stripe.api_base}/v1/customers/cus_123").
330
- with(headers: {"Stripe-Account" => "acct_123"}).
331
- to_return(body: JSON.generate(customer_fixture))
332
- c = Stripe::Customer.retrieve("cus_123", {:stripe_account => 'acct_123'})
333
-
334
- stub_request(:post, "#{Stripe.api_base}/v1/customers/cus_123").
335
- with(headers: {"Stripe-Account" => "acct_123"}).
336
- to_return(body: JSON.generate(customer_fixture))
337
- c.description = 'FOO'
319
+ stub_request(:get, "#{Stripe.api_base}/v1/customers/cus_123")
320
+ .with(headers: { "Stripe-Account" => "acct_123" })
321
+ .to_return(body: JSON.generate(customer_fixture))
322
+ c = Stripe::Customer.retrieve("cus_123", stripe_account: "acct_123")
323
+
324
+ stub_request(:post, "#{Stripe.api_base}/v1/customers/cus_123")
325
+ .with(headers: { "Stripe-Account" => "acct_123" })
326
+ .to_return(body: JSON.generate(customer_fixture))
327
+ c.description = "FOO"
338
328
  c.save
339
329
  end
340
330
 
341
- should 'add key to nested objects' do
342
- acct = Stripe::Account.construct_from({
343
- :id => 'myid',
344
- :legal_entity => {
345
- :size => 'l',
346
- :score => 4,
347
- :height => 10
348
- }
349
- })
331
+ should "add key to nested objects" do
332
+ acct = Stripe::Account.construct_from(id: "myid",
333
+ legal_entity: {
334
+ size: "l",
335
+ score: 4,
336
+ height: 10,
337
+ })
350
338
 
351
- stub_request(:post, "#{Stripe.api_base}/v1/accounts/myid").
352
- with(body: { legal_entity: { first_name: "Bob" } }).
353
- to_return(body: JSON.generate({ "id" => "myid" }))
339
+ stub_request(:post, "#{Stripe.api_base}/v1/accounts/myid")
340
+ .with(body: { legal_entity: { first_name: "Bob" } })
341
+ .to_return(body: JSON.generate("id" => "myid"))
354
342
 
355
- acct.legal_entity.first_name = 'Bob'
343
+ acct.legal_entity.first_name = "Bob"
356
344
  acct.save
357
345
  end
358
346
 
359
- should 'save nothing if nothing changes' do
360
- acct = Stripe::Account.construct_from({
361
- :id => 'acct_id',
362
- :metadata => {
363
- :key => 'value'
364
- }
365
- })
347
+ should "save nothing if nothing changes" do
348
+ acct = Stripe::Account.construct_from(id: "acct_id",
349
+ metadata: {
350
+ key: "value",
351
+ })
366
352
 
367
- stub_request(:post, "#{Stripe.api_base}/v1/accounts/acct_id").
368
- with(body: {}).
369
- to_return(body: JSON.generate({ "id" => "acct_id" }))
353
+ stub_request(:post, "#{Stripe.api_base}/v1/accounts/acct_id")
354
+ .with(body: {})
355
+ .to_return(body: JSON.generate("id" => "acct_id"))
370
356
 
371
357
  acct.save
372
358
  end
373
359
 
374
- should 'not save nested API resources' do
375
- ch = Stripe::Charge.construct_from({
376
- :id => 'ch_id',
377
- :customer => {
378
- :object => 'customer',
379
- :id => 'customer_id'
380
- }
381
- })
360
+ should "not save nested API resources" do
361
+ ch = Stripe::Charge.construct_from(id: "ch_id",
362
+ customer: {
363
+ object: "customer",
364
+ id: "customer_id",
365
+ })
382
366
 
383
- stub_request(:post, "#{Stripe.api_base}/v1/charges/ch_id").
384
- with(body: {}).
385
- to_return(body: JSON.generate({ "id" => "ch_id" }))
367
+ stub_request(:post, "#{Stripe.api_base}/v1/charges/ch_id")
368
+ .with(body: {})
369
+ .to_return(body: JSON.generate("id" => "ch_id"))
386
370
 
387
- ch.customer.description = 'Bob'
371
+ ch.customer.description = "Bob"
388
372
  ch.save
389
373
  end
390
374
 
391
- should 'correctly handle replaced nested objects' do
392
- acct = Stripe::Account.construct_from({
393
- :id => 'myid',
394
- :legal_entity => {
395
- :last_name => 'Smith',
396
- :address => {
397
- :line1 => "test",
398
- :city => "San Francisco"
399
- }
400
- }
401
- })
375
+ should "correctly handle replaced nested objects" do
376
+ acct = Stripe::Account.construct_from(id: "myid",
377
+ legal_entity: {
378
+ last_name: "Smith",
379
+ address: {
380
+ line1: "test",
381
+ city: "San Francisco",
382
+ },
383
+ })
402
384
 
403
- stub_request(:post, "#{Stripe.api_base}/v1/accounts/myid").
404
- with(body: { legal_entity: { address: { line1: "Test2", city: "" } } }).
405
- to_return(body: JSON.generate({ "id" => "my_id" }))
385
+ stub_request(:post, "#{Stripe.api_base}/v1/accounts/myid")
386
+ .with(body: { legal_entity: { address: { line1: "Test2", city: "" } } })
387
+ .to_return(body: JSON.generate("id" => "my_id"))
406
388
 
407
- acct.legal_entity.address = {:line1 => 'Test2'}
389
+ acct.legal_entity.address = { line1: "Test2" }
408
390
  acct.save
409
391
  end
410
392
 
411
- should 'correctly handle array setting' do
412
- acct = Stripe::Account.construct_from({
413
- :id => 'myid',
414
- :legal_entity => {}
415
- })
393
+ should "correctly handle array setting" do
394
+ acct = Stripe::Account.construct_from(id: "myid",
395
+ legal_entity: {})
416
396
 
417
- stub_request(:post, "#{Stripe.api_base}/v1/accounts/myid").
418
- with(body: { legal_entity: { additional_owners: [{ first_name: "Bob" }] } }).
419
- to_return(body: JSON.generate({ "id" => "myid" }))
397
+ stub_request(:post, "#{Stripe.api_base}/v1/accounts/myid")
398
+ .with(body: { legal_entity: { additional_owners: [{ first_name: "Bob" }] } })
399
+ .to_return(body: JSON.generate("id" => "myid"))
420
400
 
421
- acct.legal_entity.additional_owners = [{:first_name => 'Bob'}]
401
+ acct.legal_entity.additional_owners = [{ first_name: "Bob" }]
422
402
  acct.save
423
403
  end
424
404
 
425
- should 'correctly handle array insertion' do
426
- acct = Stripe::Account.construct_from({
427
- :id => 'myid',
428
- :legal_entity => {
429
- :additional_owners => []
430
- }
431
- })
405
+ should "correctly handle array insertion" do
406
+ acct = Stripe::Account.construct_from(id: "myid",
407
+ legal_entity: {
408
+ additional_owners: [],
409
+ })
432
410
 
433
411
  # Note that this isn't a perfect check because we're using webmock's
434
412
  # data decoding, which isn't aware of the Stripe array encoding that we
435
413
  # use here.
436
- stub_request(:post, "#{Stripe.api_base}/v1/accounts/myid").
437
- with(body: { legal_entity: { additional_owners: [{ first_name: "Bob" }] } }).
438
- to_return(body: JSON.generate({ "id" => "myid" }))
414
+ stub_request(:post, "#{Stripe.api_base}/v1/accounts/myid")
415
+ .with(body: { legal_entity: { additional_owners: [{ first_name: "Bob" }] } })
416
+ .to_return(body: JSON.generate("id" => "myid"))
439
417
 
440
- acct.legal_entity.additional_owners << {:first_name => 'Bob'}
418
+ acct.legal_entity.additional_owners << { first_name: "Bob" }
441
419
  acct.save
442
420
  end
443
421
 
444
- should 'correctly handle array updates' do
445
- acct = Stripe::Account.construct_from({
446
- :id => 'myid',
447
- :legal_entity => {
448
- :additional_owners => [{:first_name => 'Bob'}, {:first_name => 'Jane'}]
449
- }
450
- })
422
+ should "correctly handle array updates" do
423
+ acct = Stripe::Account.construct_from(id: "myid",
424
+ legal_entity: {
425
+ additional_owners: [{ first_name: "Bob" }, { first_name: "Jane" }],
426
+ })
451
427
 
452
428
  # Note that this isn't a perfect check because we're using webmock's
453
429
  # data decoding, which isn't aware of the Stripe array encoding that we
454
430
  # use here.
455
- stub_request(:post, "#{Stripe.api_base}/v1/accounts/myid").
456
- with(body: { legal_entity: { additional_owners: [{ first_name: "Janet" }] } }).
457
- to_return(body: JSON.generate({ "id" => "myid" }))
431
+ stub_request(:post, "#{Stripe.api_base}/v1/accounts/myid")
432
+ .with(body: { legal_entity: { additional_owners: [{ first_name: "Janet" }] } })
433
+ .to_return(body: JSON.generate("id" => "myid"))
458
434
 
459
- acct.legal_entity.additional_owners[1].first_name = 'Janet'
435
+ acct.legal_entity.additional_owners[1].first_name = "Janet"
460
436
  acct.save
461
437
  end
462
438
 
463
- should 'correctly handle array noops' do
464
- acct = Stripe::Account.construct_from({
465
- :id => 'myid',
466
- :legal_entity => {
467
- :additional_owners => [{:first_name => 'Bob'}]
468
- },
469
- :currencies_supported => ['usd', 'cad']
470
- })
439
+ should "correctly handle array noops" do
440
+ acct = Stripe::Account.construct_from(id: "myid",
441
+ legal_entity: {
442
+ additional_owners: [{ first_name: "Bob" }],
443
+ },
444
+ currencies_supported: %w[usd cad])
471
445
 
472
- stub_request(:post, "#{Stripe.api_base}/v1/accounts/myid").
473
- with(body: {}).
474
- to_return(body: JSON.generate({ "id" => "myid" }))
446
+ stub_request(:post, "#{Stripe.api_base}/v1/accounts/myid")
447
+ .with(body: {})
448
+ .to_return(body: JSON.generate("id" => "myid"))
475
449
 
476
450
  acct.save
477
451
  end
478
452
 
479
- should 'correctly handle hash noops' do
480
- acct = Stripe::Account.construct_from({
481
- :id => 'myid',
482
- :legal_entity => {
483
- :address => {:line1 => '1 Two Three'}
484
- }
485
- })
453
+ should "correctly handle hash noops" do
454
+ acct = Stripe::Account.construct_from(id: "myid",
455
+ legal_entity: {
456
+ address: { line1: "1 Two Three" },
457
+ })
486
458
 
487
- stub_request(:post, "#{Stripe.api_base}/v1/accounts/myid").
488
- with(body: {}).
489
- to_return(body: JSON.generate({ "id" => "myid" }))
459
+ stub_request(:post, "#{Stripe.api_base}/v1/accounts/myid")
460
+ .with(body: {})
461
+ .to_return(body: JSON.generate("id" => "myid"))
490
462
 
491
463
  acct.save
492
464
  end
493
465
 
494
- should 'should create a new resource when an object without an id is saved' do
495
- account = Stripe::Account.construct_from({
496
- :id => nil,
497
- :display_name => nil,
498
- })
466
+ should "should create a new resource when an object without an id is saved" do
467
+ account = Stripe::Account.construct_from(id: nil,
468
+ display_name: nil)
499
469
 
500
- stub_request(:post, "#{Stripe.api_base}/v1/accounts").
501
- with(body: { display_name: "stripe" }).
502
- to_return(body: JSON.generate({ "id" => "acct_123" }))
470
+ stub_request(:post, "#{Stripe.api_base}/v1/accounts")
471
+ .with(body: { display_name: "stripe" })
472
+ .to_return(body: JSON.generate("id" => "acct_123"))
503
473
 
504
- account.display_name = 'stripe'
474
+ account.display_name = "stripe"
505
475
  account.save
506
476
  end
507
477
 
508
- should 'set attributes as part of save' do
509
- account = Stripe::Account.construct_from({
510
- :id => nil,
511
- :display_name => nil,
512
- })
478
+ should "set attributes as part of save" do
479
+ account = Stripe::Account.construct_from(id: nil,
480
+ display_name: nil)
513
481
 
514
- stub_request(:post, "#{Stripe.api_base}/v1/accounts").
515
- with(body: { display_name: "stripe", metadata: { key: "value" } }).
516
- to_return(body: JSON.generate({ "id" => "acct_123" }))
482
+ stub_request(:post, "#{Stripe.api_base}/v1/accounts")
483
+ .with(body: { display_name: "stripe", metadata: { key: "value" } })
484
+ .to_return(body: JSON.generate("id" => "acct_123"))
517
485
 
518
- account.save(:display_name => 'stripe', :metadata => {:key => 'value' })
486
+ account.save(display_name: "stripe", metadata: { key: "value" })
519
487
  end
520
488
  end
521
489
 
522
490
  @@fixtures = {}
523
491
  setup do
524
492
  if @@fixtures.empty?
525
- set_fixture(:charge) do
493
+ cache_fixture(:charge) do
526
494
  Charge.retrieve("ch_123")
527
495
  end
528
- set_fixture(:customer) do
496
+ cache_fixture(:customer) do
529
497
  Customer.retrieve("cus_123")
530
498
  end
531
499
  end
@@ -541,13 +509,9 @@ module Stripe
541
509
  @@fixtures[:customer]
542
510
  end
543
511
 
544
- def get_fixture(key)
545
- @@fixtures.fetch(key)
546
- end
547
-
548
512
  # Expects to retrieve a fixture from stripe-mock (an API call should be
549
513
  # included in the block to yield to) and does very simple memoization.
550
- def set_fixture(key)
514
+ def cache_fixture(key)
551
515
  return @@fixtures[key] if @@fixtures.key?(key)
552
516
 
553
517
  obj = yield