stripe 4.18.0 → 4.18.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (124) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +11 -1
  3. data/.rubocop_todo.yml +3 -15
  4. data/CHANGELOG.md +3 -0
  5. data/Gemfile +3 -1
  6. data/VERSION +1 -1
  7. data/lib/stripe.rb +5 -3
  8. data/lib/stripe/account.rb +31 -17
  9. data/lib/stripe/alipay_account.rb +10 -3
  10. data/lib/stripe/api_operations/nested_resource.rb +12 -6
  11. data/lib/stripe/api_operations/request.rb +3 -7
  12. data/lib/stripe/api_operations/save.rb +1 -3
  13. data/lib/stripe/api_resource.rb +11 -3
  14. data/lib/stripe/application_fee.rb +2 -1
  15. data/lib/stripe/application_fee_refund.rb +11 -3
  16. data/lib/stripe/bank_account.rb +16 -4
  17. data/lib/stripe/bitcoin_receiver.rb +2 -1
  18. data/lib/stripe/capability.rb +10 -3
  19. data/lib/stripe/card.rb +16 -5
  20. data/lib/stripe/charge.rb +4 -6
  21. data/lib/stripe/customer.rb +5 -7
  22. data/lib/stripe/ephemeral_key.rb +4 -1
  23. data/lib/stripe/errors.rb +8 -8
  24. data/lib/stripe/invoice.rb +2 -1
  25. data/lib/stripe/list_object.rb +9 -4
  26. data/lib/stripe/login_link.rb +4 -1
  27. data/lib/stripe/order.rb +3 -5
  28. data/lib/stripe/person.rb +7 -2
  29. data/lib/stripe/reversal.rb +10 -3
  30. data/lib/stripe/singleton_api_resource.rb +3 -1
  31. data/lib/stripe/source.rb +4 -2
  32. data/lib/stripe/stripe_client.rb +84 -65
  33. data/lib/stripe/stripe_object.rb +50 -36
  34. data/lib/stripe/subscription.rb +1 -3
  35. data/lib/stripe/subscription_item.rb +2 -1
  36. data/lib/stripe/subscription_schedule_revision.rb +13 -4
  37. data/lib/stripe/tax_id.rb +7 -3
  38. data/lib/stripe/transfer.rb +2 -1
  39. data/lib/stripe/usage_record.rb +12 -3
  40. data/lib/stripe/util.rb +40 -24
  41. data/lib/stripe/version.rb +1 -1
  42. data/lib/stripe/webhook.rb +4 -2
  43. data/stripe.gemspec +4 -2
  44. data/test/stripe/account_link_test.rb +1 -1
  45. data/test/stripe/account_test.rb +1 -1
  46. data/test/stripe/alipay_account_test.rb +1 -1
  47. data/test/stripe/api_operations_test.rb +1 -2
  48. data/test/stripe/api_resource_test.rb +5 -8
  49. data/test/stripe/apple_pay_domain_test.rb +1 -1
  50. data/test/stripe/application_fee_refund_test.rb +1 -1
  51. data/test/stripe/application_fee_test.rb +1 -1
  52. data/test/stripe/balance_test.rb +1 -1
  53. data/test/stripe/bank_account_test.rb +1 -1
  54. data/test/stripe/capability_test.rb +1 -1
  55. data/test/stripe/charge_test.rb +1 -1
  56. data/test/stripe/checkout/session_test.rb +1 -1
  57. data/test/stripe/country_spec_test.rb +1 -1
  58. data/test/stripe/coupon_test.rb +1 -1
  59. data/test/stripe/credit_note_test.rb +1 -1
  60. data/test/stripe/customer_card_test.rb +1 -1
  61. data/test/stripe/customer_test.rb +1 -1
  62. data/test/stripe/dispute_test.rb +1 -1
  63. data/test/stripe/ephemeral_key_test.rb +1 -1
  64. data/test/stripe/errors_test.rb +1 -1
  65. data/test/stripe/exchange_rate_test.rb +1 -1
  66. data/test/stripe/file_link_test.rb +1 -1
  67. data/test/stripe/file_test.rb +1 -1
  68. data/test/stripe/file_upload_test.rb +1 -1
  69. data/test/stripe/invoice_item_test.rb +1 -1
  70. data/test/stripe/invoice_line_item_test.rb +1 -1
  71. data/test/stripe/invoice_test.rb +1 -1
  72. data/test/stripe/issuer_fraud_record_test.rb +1 -1
  73. data/test/stripe/issuing/authorization_test.rb +1 -1
  74. data/test/stripe/issuing/card_test.rb +1 -1
  75. data/test/stripe/issuing/cardholder_test.rb +1 -1
  76. data/test/stripe/issuing/dispute_test.rb +1 -1
  77. data/test/stripe/issuing/transaction_test.rb +1 -1
  78. data/test/stripe/list_object_test.rb +1 -1
  79. data/test/stripe/login_link_test.rb +1 -1
  80. data/test/stripe/oauth_test.rb +1 -1
  81. data/test/stripe/order_return_test.rb +1 -1
  82. data/test/stripe/order_test.rb +8 -1
  83. data/test/stripe/payment_intent_test.rb +1 -1
  84. data/test/stripe/payment_method_test.rb +1 -1
  85. data/test/stripe/payout_test.rb +1 -1
  86. data/test/stripe/person_test.rb +1 -1
  87. data/test/stripe/plan_test.rb +1 -1
  88. data/test/stripe/product_test.rb +1 -1
  89. data/test/stripe/radar/early_fraud_warning_test.rb +1 -1
  90. data/test/stripe/radar/value_list_item_test.rb +1 -1
  91. data/test/stripe/radar/value_list_test.rb +1 -1
  92. data/test/stripe/recipient_test.rb +1 -1
  93. data/test/stripe/refund_test.rb +1 -1
  94. data/test/stripe/reporting/report_run_test.rb +1 -1
  95. data/test/stripe/reporting/report_type_test.rb +1 -1
  96. data/test/stripe/reversal_test.rb +1 -1
  97. data/test/stripe/review_test.rb +1 -1
  98. data/test/stripe/sigma/scheduled_query_run_test.rb +1 -1
  99. data/test/stripe/sku_test.rb +1 -1
  100. data/test/stripe/source_test.rb +1 -1
  101. data/test/stripe/source_transaction_test.rb +1 -1
  102. data/test/stripe/stripe_client_test.rb +1 -1
  103. data/test/stripe/stripe_object_test.rb +1 -1
  104. data/test/stripe/stripe_response_test.rb +1 -1
  105. data/test/stripe/subscription_item_test.rb +1 -1
  106. data/test/stripe/subscription_schedule_revision_test.rb +1 -1
  107. data/test/stripe/subscription_schedule_test.rb +1 -1
  108. data/test/stripe/subscription_test.rb +1 -1
  109. data/test/stripe/tax_id_test.rb +1 -1
  110. data/test/stripe/tax_rate_test.rb +1 -1
  111. data/test/stripe/terminal/connection_token_test.rb +1 -1
  112. data/test/stripe/terminal/location_test.rb +1 -1
  113. data/test/stripe/terminal/reader_test.rb +1 -1
  114. data/test/stripe/three_d_secure_test.rb +1 -1
  115. data/test/stripe/topup_test.rb +1 -1
  116. data/test/stripe/transfer_test.rb +1 -1
  117. data/test/stripe/usage_record_summary_test.rb +1 -1
  118. data/test/stripe/usage_record_test.rb +1 -1
  119. data/test/stripe/util_test.rb +1 -1
  120. data/test/stripe/webhook_endpoint_test.rb +1 -1
  121. data/test/stripe/webhook_test.rb +2 -2
  122. data/test/stripe_test.rb +1 -1
  123. data/test/test_helper.rb +4 -6
  124. metadata +2 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: aa4fff8f85be6e986db2d71a6bc50c8cfaf9fd64ad838c8538d0af66e0fddf31
4
- data.tar.gz: '0494e9d502030d6c2410ccc3fc921cf465a7c2863307b74e33fe7ea842666cf7'
3
+ metadata.gz: 9d2bc94a670bcbb6341ce794ad5415d30aece0177fc50a6a176c7a5a33083664
4
+ data.tar.gz: e45ad1040e1ebe11e4493a8b77c35cbe7b25bda4511a23d4c655a1a2ef3f0a0a
5
5
  SHA512:
6
- metadata.gz: '07383793b058de60012ced7bebdcaee1b75a2ad6dff5df55c5cfefd933fffbdf18e1b332d7c40aaf8702067eedc41f62256daedf269d4d519f46c9b8005f7df5'
7
- data.tar.gz: f7a5b758f8821c39c782c56a9472c46a104bd118af4aebd951bcef7edbe67aebd0eef779ca1fbb33fdc42de8e7f41a127d233cb48ae208e3b84d66c9e0de3178
6
+ metadata.gz: b4aa8383711814c62576ff737c40fb8f83e40c9c4b60753d54f7cbf42fa3d652083373d5f2d587850e9e76c8d6090ce6fa2e2408157860e108e4a6d72526fe15
7
+ data.tar.gz: daf904e718c62170c2f8a4da0be10b29d5c040d9a9fbbcb95ad8a57bdd91a862a6cd21aff54fa7de46aa62c9bd79097f801d6b768d4083b7dd24e34e96f6e630
@@ -13,6 +13,10 @@ Layout/IndentArray:
13
13
  Layout/IndentHash:
14
14
  EnforcedStyle: consistent
15
15
 
16
+ Metrics/LineLength:
17
+ Exclude:
18
+ - "test/**/*.rb"
19
+
16
20
  Metrics/MethodLength:
17
21
  # There's ~2 long methods in `StripeClient`. If we want to truncate those a
18
22
  # little, we could move this to be closer to ~30 (but the default of 10 is
@@ -22,11 +26,17 @@ Metrics/MethodLength:
22
26
  Metrics/ModuleLength:
23
27
  Enabled: false
24
28
 
29
+ Style/AccessModifierDeclarations:
30
+ EnforcedStyle: inline
31
+
25
32
  Style/FrozenStringLiteralComment:
26
33
  EnforcedStyle: always
27
34
 
28
35
  Style/StringLiterals:
29
36
  EnforcedStyle: double_quotes
30
37
 
31
- Style/TrailingCommaInLiteral:
38
+ Style/TrailingCommaInArrayLiteral:
39
+ EnforcedStyleForMultiline: consistent_comma
40
+
41
+ Style/TrailingCommaInHashLiteral:
32
42
  EnforcedStyleForMultiline: consistent_comma
@@ -1,6 +1,6 @@
1
1
  # This configuration was generated by
2
2
  # `rubocop --auto-gen-config`
3
- # on 2019-03-25 18:32:26 -0700 using RuboCop version 0.50.0.
3
+ # on 2019-05-24 10:18:48 -0700 using RuboCop version 0.57.2.
4
4
  # The point is for the user to remove these configuration records
5
5
  # one by one as the offenses are removed from the code base.
6
6
  # Note that changes in the inspected code, or installation of new
@@ -15,7 +15,7 @@ Metrics/AbcSize:
15
15
  Metrics/BlockLength:
16
16
  Max: 498
17
17
 
18
- # Offense count: 9
18
+ # Offense count: 11
19
19
  # Configuration parameters: CountComments.
20
20
  Metrics/ClassLength:
21
21
  Max: 673
@@ -24,12 +24,6 @@ Metrics/ClassLength:
24
24
  Metrics/CyclomaticComplexity:
25
25
  Max: 15
26
26
 
27
- # Offense count: 364
28
- # Configuration parameters: AllowHeredoc, AllowURI, URISchemes, IgnoreCopDirectives, IgnoredPatterns.
29
- # URISchemes: http, https
30
- Metrics/LineLength:
31
- Max: 310
32
-
33
27
  # Offense count: 6
34
28
  # Configuration parameters: CountKeywordArgs.
35
29
  Metrics/ParameterLists:
@@ -39,12 +33,6 @@ Metrics/ParameterLists:
39
33
  Metrics/PerceivedComplexity:
40
34
  Max: 17
41
35
 
42
- # Offense count: 2
43
- Style/ClassVars:
44
- Exclude:
45
- - 'lib/stripe/stripe_object.rb'
46
- - 'test/stripe/api_resource_test.rb'
47
-
48
- # Offense count: 78
36
+ # Offense count: 84
49
37
  Style/Documentation:
50
38
  Enabled: false
@@ -1,5 +1,8 @@
1
1
  # Changelog
2
2
 
3
+ ## 4.18.1 - 2019-05-27
4
+ * [#789](https://github.com/stripe/stripe-ruby/pull/789) Allow `Order#pay` to be called without arguments
5
+
3
6
  ## 4.18.0 - 2019-05-23
4
7
  * [#783](https://github.com/stripe/stripe-ruby/pull/783) Add support for `radar.early_fraud_warning` resource
5
8
 
data/Gemfile CHANGED
@@ -18,7 +18,9 @@ group :development do
18
18
  # `Gemfile.lock` checked in, so to prevent good builds from suddenly going
19
19
  # bad, pin to a specific version number here. Try to keep this relatively
20
20
  # up-to-date, but it's not the end of the world if it's not.
21
- gem "rubocop", "0.50.0"
21
+ # Note that 0.57.2 is the most recent version we can use until we drop
22
+ # support for Ruby 2.1.
23
+ gem "rubocop", "0.57.2"
22
24
 
23
25
  # Rack 2.0+ requires Ruby >= 2.2.2 which is problematic for the test suite on
24
26
  # older Ruby versions. Check Ruby the version here and put a maximum
data/VERSION CHANGED
@@ -1 +1 @@
1
- 4.18.0
1
+ 4.18.1
@@ -116,7 +116,7 @@ require "stripe/webhook_endpoint"
116
116
  require "stripe/oauth"
117
117
 
118
118
  module Stripe
119
- DEFAULT_CA_BUNDLE_PATH = ::File.dirname(__FILE__) + "/data/ca-certificates.crt"
119
+ DEFAULT_CA_BUNDLE_PATH = __dir__ + "/data/ca-certificates.crt"
120
120
 
121
121
  @app_info = nil
122
122
 
@@ -143,7 +143,8 @@ module Stripe
143
143
  @enable_telemetry = false
144
144
 
145
145
  class << self
146
- attr_accessor :stripe_account, :api_key, :api_base, :verify_ssl_certs, :api_version, :client_id, :connect_base, :uploads_base,
146
+ attr_accessor :stripe_account, :api_key, :api_base, :verify_ssl_certs,
147
+ :api_version, :client_id, :connect_base, :uploads_base,
147
148
  :open_timeout, :read_timeout, :proxy
148
149
 
149
150
  attr_reader :max_network_retry_delay, :initial_network_retry_delay
@@ -215,7 +216,8 @@ module Stripe
215
216
  end
216
217
 
217
218
  if !val.nil? && ![LEVEL_DEBUG, LEVEL_ERROR, LEVEL_INFO].include?(val)
218
- raise ArgumentError, "log_level should only be set to `nil`, `debug` or `info`"
219
+ raise ArgumentError,
220
+ "log_level should only be set to `nil`, `debug` or `info`"
219
221
  end
220
222
  @log_level = val
221
223
  end
@@ -18,10 +18,12 @@ module Stripe
18
18
  operations: %i[retrieve update list],
19
19
  resource_plural: "capabilities"
20
20
  nested_resource_class_methods :external_account,
21
- operations: %i[create retrieve update delete list]
21
+ operations: %i[create retrieve update delete
22
+ list]
22
23
  nested_resource_class_methods :login_link, operations: %i[create]
23
24
  nested_resource_class_methods :person,
24
- operations: %i[create retrieve update delete list]
25
+ operations: %i[create retrieve update delete
26
+ list]
25
27
 
26
28
  # This method is deprecated. Please use `#external_account=` instead.
27
29
  save_nested_resource :bank_account
@@ -37,13 +39,18 @@ module Stripe
37
39
 
38
40
  # @override To make id optional
39
41
  def self.retrieve(id = ARGUMENT_NOT_PROVIDED, opts = {})
40
- id = id.equal?(ARGUMENT_NOT_PROVIDED) ? nil : Util.check_string_argument!(id)
42
+ id = if id.equal?(ARGUMENT_NOT_PROVIDED)
43
+ nil
44
+ else
45
+ Util.check_string_argument!(id)
46
+ end
41
47
 
42
48
  # Account used to be a singleton, where this method's signature was
43
49
  # `(opts={})`. For the sake of not breaking folks who pass in an OAuth
44
50
  # key in opts, let's lurkily string match for it.
45
51
  if opts == {} && id.is_a?(String) && id.start_with?("sk_")
46
- # `super` properly assumes a String opts is the apiKey and normalizes as expected.
52
+ # `super` properly assumes a String opts is the apiKey and normalizes
53
+ # as expected.
47
54
  opts = id
48
55
  id = nil
49
56
  end
@@ -55,8 +62,9 @@ module Stripe
55
62
  Util.convert_to_stripe_object(resp.data, opts)
56
63
  end
57
64
 
58
- # We are not adding a helper for capabilities here as the Account object already has a
59
- # capabilities property which is a hash and not the sub-list of capabilities.
65
+ # We are not adding a helper for capabilities here as the Account object
66
+ # already has a capabilities property which is a hash and not the sub-list
67
+ # of capabilities.
60
68
 
61
69
  def reject(params = {}, opts = {})
62
70
  resp, opts = request(:post, resource_url + "/reject", params, opts)
@@ -114,8 +122,11 @@ module Stripe
114
122
  self["legal_entity"]
115
123
  end
116
124
 
117
- def legal_entity=(_)
118
- raise NoMethodError, 'Overriding legal_entity can cause serious issues. Instead, set the individual fields of legal_entity like blah.legal_entity.first_name = \'Blah\''
125
+ def legal_entity=(_legal_entity)
126
+ raise NoMethodError,
127
+ "Overriding legal_entity can cause serious issues. Instead, set " \
128
+ "the individual fields of legal_entity like " \
129
+ "`account.legal_entity.first_name = 'Blah'`"
119
130
  end
120
131
 
121
132
  def deauthorize(client_id = nil, opts = {})
@@ -128,15 +139,17 @@ module Stripe
128
139
 
129
140
  ARGUMENT_NOT_PROVIDED = Object.new
130
141
 
131
- private
132
-
133
- def serialize_additional_owners(legal_entity, additional_owners)
134
- original_value = legal_entity.instance_variable_get(:@original_values)[:additional_owners]
142
+ private def serialize_additional_owners(legal_entity, additional_owners)
143
+ original_value =
144
+ legal_entity
145
+ .instance_variable_get(:@original_values)[:additional_owners]
135
146
  if original_value && original_value.length > additional_owners.length
136
147
  # url params provide no mechanism for deleting an item in an array,
137
148
  # just overwriting the whole array or adding new items. So let's not
138
149
  # allow deleting without a full overwrite until we have a solution.
139
- raise ArgumentError, "You cannot delete an item from an array, you must instead set a new array"
150
+ raise ArgumentError,
151
+ "You cannot delete an item from an array, you must instead " \
152
+ "set a new array"
140
153
  end
141
154
 
142
155
  update_hash = {}
@@ -148,10 +161,11 @@ module Stripe
148
161
  # StripeObject.
149
162
  update = v.is_a?(StripeObject) ? v.serialize_params : v
150
163
 
151
- if update != {} && (!original_value ||
152
- update != legal_entity.serialize_params_value(original_value[i], nil, false, true))
153
- update_hash[i.to_s] = update
154
- end
164
+ next unless update != {} && (!original_value ||
165
+ update != legal_entity.serialize_params_value(original_value[i], nil,
166
+ false, true))
167
+
168
+ update_hash[i.to_s] = update
155
169
  end
156
170
  update_hash
157
171
  end
@@ -13,15 +13,22 @@ module Stripe
13
13
  "Alipay accounts cannot be accessed without a customer ID."
14
14
  end
15
15
 
16
- "#{Customer.resource_url}/#{CGI.escape(customer)}/sources/#{CGI.escape(id)}"
16
+ "#{Customer.resource_url}/#{CGI.escape(customer)}/sources" \
17
+ "/#{CGI.escape(id)}"
17
18
  end
18
19
 
19
20
  def self.update(_id, _params = nil, _opts = nil)
20
- raise NotImplementedError, "Alipay accounts cannot be updated without a customer ID. Update an Alipay account by `a = customer.sources.retrieve('alipay_account_id'); a.save`"
21
+ raise NotImplementedError,
22
+ "Alipay accounts cannot be updated without a customer ID. " \
23
+ "Update an Alipay account using `Customer.update_source(" \
24
+ "'customer_id', 'alipay_account_id', update_params)`"
21
25
  end
22
26
 
23
27
  def self.retrieve(_id, _opts = nil)
24
- raise NotImplementedError, "Alipay accounts cannot be retrieved without a customer ID. Retrieve an Alipay account using customer.sources.retrieve('alipay_account_id')"
28
+ raise NotImplementedError,
29
+ "Alipay accounts cannot be retrieved without a customer ID. " \
30
+ "Retrieve an Alipay account using `Customer.retrieve_source(" \
31
+ "'customer_id', 'alipay_account_id')`"
25
32
  end
26
33
  end
27
34
  end
@@ -10,7 +10,8 @@ module Stripe
10
10
  # methods `.create_reversal`, `.retrieve_reversal`, `.update_reversal`,
11
11
  # etc. all become available.
12
12
  module NestedResource
13
- def nested_resource_class_methods(resource, path: nil, operations: nil, resource_plural: nil)
13
+ def nested_resource_class_methods(resource, path: nil, operations: nil,
14
+ resource_plural: nil)
14
15
  resource_plural ||= "#{resource}s"
15
16
  path ||= resource_plural
16
17
  raise ArgumentError, "operations array required" if operations.nil?
@@ -25,31 +26,36 @@ module Stripe
25
26
  operations.each do |operation|
26
27
  case operation
27
28
  when :create
28
- define_singleton_method(:"create_#{resource}") do |id, params = {}, opts = {}|
29
+ define_singleton_method(:"create_#{resource}") \
30
+ do |id, params = {}, opts = {}|
29
31
  url = send(resource_url_method, id)
30
32
  resp, opts = request(:post, url, params, opts)
31
33
  Util.convert_to_stripe_object(resp.data, opts)
32
34
  end
33
35
  when :retrieve
34
- define_singleton_method(:"retrieve_#{resource}") do |id, nested_id, opts = {}|
36
+ define_singleton_method(:"retrieve_#{resource}") \
37
+ do |id, nested_id, opts = {}|
35
38
  url = send(resource_url_method, id, nested_id)
36
39
  resp, opts = request(:get, url, {}, opts)
37
40
  Util.convert_to_stripe_object(resp.data, opts)
38
41
  end
39
42
  when :update
40
- define_singleton_method(:"update_#{resource}") do |id, nested_id, params = {}, opts = {}|
43
+ define_singleton_method(:"update_#{resource}") \
44
+ do |id, nested_id, params = {}, opts = {}|
41
45
  url = send(resource_url_method, id, nested_id)
42
46
  resp, opts = request(:post, url, params, opts)
43
47
  Util.convert_to_stripe_object(resp.data, opts)
44
48
  end
45
49
  when :delete
46
- define_singleton_method(:"delete_#{resource}") do |id, nested_id, params = {}, opts = {}|
50
+ define_singleton_method(:"delete_#{resource}") \
51
+ do |id, nested_id, params = {}, opts = {}|
47
52
  url = send(resource_url_method, id, nested_id)
48
53
  resp, opts = request(:delete, url, params, opts)
49
54
  Util.convert_to_stripe_object(resp.data, opts)
50
55
  end
51
56
  when :list
52
- define_singleton_method(:"list_#{resource_plural}") do |id, params = {}, opts = {}|
57
+ define_singleton_method(:"list_#{resource_plural}") \
58
+ do |id, params = {}, opts = {}|
53
59
  url = send(resource_url_method, id)
54
60
  resp, opts = request(:get, url, params, opts)
55
61
  Util.convert_to_stripe_object(resp.data, opts)
@@ -31,12 +31,10 @@ module Stripe
31
31
  [resp, opts_to_persist]
32
32
  end
33
33
 
34
- private
35
-
36
- def warn_on_opts_in_params(params)
34
+ private def warn_on_opts_in_params(params)
37
35
  Util::OPTS_USER_SPECIFIED.each do |opt|
38
36
  if params.key?(opt)
39
- $stderr.puts("WARNING: #{opt} should be in opts instead of params.")
37
+ warn("WARNING: #{opt} should be in opts instead of params.")
40
38
  end
41
39
  end
42
40
  end
@@ -46,9 +44,7 @@ module Stripe
46
44
  base.extend(ClassMethods)
47
45
  end
48
46
 
49
- protected
50
-
51
- def request(method, url, params = {}, opts = {})
47
+ protected def request(method, url, params = {}, opts = {})
52
48
  opts = @opts.merge(Util.normalize_opts(opts))
53
49
  self.class.request(method, url, params, opts)
54
50
  end
@@ -76,9 +76,7 @@ module Stripe
76
76
  base.extend(ClassMethods)
77
77
  end
78
78
 
79
- private
80
-
81
- def save_url
79
+ private def save_url
82
80
  # This switch essentially allows us "upsert"-like functionality. If the
83
81
  # API resource doesn't have an ID set (suggesting that it's new) and
84
82
  # its class responds to .create (which comes from
@@ -17,7 +17,9 @@ module Stripe
17
17
 
18
18
  def self.resource_url
19
19
  if self == APIResource
20
- raise NotImplementedError, "APIResource is an abstract class. You should perform actions on its subclasses (Charge, Customer, etc.)"
20
+ raise NotImplementedError,
21
+ "APIResource is an abstract class. You should perform actions " \
22
+ "on its subclasses (Charge, Customer, etc.)"
21
23
  end
22
24
  # Namespaces are separated in object names with periods (.) and in URLs
23
25
  # with forward slashes (/), so replace the former with the latter.
@@ -62,7 +64,9 @@ module Stripe
62
64
  # will send a POST request to `/v1/<object_name>/capture`.
63
65
  def self.custom_method(name, http_verb:, http_path: nil)
64
66
  unless %i[get post delete].include?(http_verb)
65
- raise ArgumentError, "Invalid http_verb value: #{http_verb.inspect}. Should be one of :get, :post or :delete."
67
+ raise ArgumentError,
68
+ "Invalid http_verb value: #{http_verb.inspect}. Should be one " \
69
+ "of :get, :post or :delete."
66
70
  end
67
71
  http_path ||= name.to_s
68
72
  define_singleton_method(name) do |id, params = {}, opts = {}|
@@ -74,7 +78,11 @@ module Stripe
74
78
 
75
79
  def resource_url
76
80
  unless (id = self["id"])
77
- raise InvalidRequestError.new("Could not determine which URL to request: #{self.class} instance has invalid ID: #{id.inspect}", "id")
81
+ raise InvalidRequestError.new(
82
+ "Could not determine which URL to request: #{self.class} instance " \
83
+ "has invalid ID: #{id.inspect}",
84
+ "id"
85
+ )
78
86
  end
79
87
  "#{self.class.resource_url}/#{CGI.escape(id)}"
80
88
  end
@@ -7,7 +7,8 @@ module Stripe
7
7
 
8
8
  OBJECT_NAME = "application_fee".freeze
9
9
 
10
- nested_resource_class_methods :refund, operations: %i[create retrieve update list]
10
+ nested_resource_class_methods :refund,
11
+ operations: %i[create retrieve update list]
11
12
 
12
13
  # If you don't need access to an updated fee object after the refund, it's
13
14
  # more performant to just call `fee.refunds.create` directly.
@@ -8,15 +8,23 @@ module Stripe
8
8
  OBJECT_NAME = "fee_refund".freeze
9
9
 
10
10
  def resource_url
11
- "#{ApplicationFee.resource_url}/#{CGI.escape(fee)}/refunds/#{CGI.escape(id)}"
11
+ "#{ApplicationFee.resource_url}/#{CGI.escape(fee)}/refunds" \
12
+ "/#{CGI.escape(id)}"
12
13
  end
13
14
 
14
15
  def self.update(_id, _params = nil, _opts = nil)
15
- raise NotImplementedError, "Refunds cannot be updated without an application fee ID. Update a refund by using `a = appfee.refunds.retrieve('refund_id'); a.save`"
16
+ raise NotImplementedError,
17
+ "Application fee refunds cannot be updated without an " \
18
+ "application fee ID. Update an application fee refund using " \
19
+ "`ApplicationFee.update_refund('fee_id', 'refund_id', " \
20
+ "update_params)`"
16
21
  end
17
22
 
18
23
  def self.retrieve(_id, _api_key = nil)
19
- raise NotImplementedError, "Refunds cannot be retrieved without an application fee ID. Retrieve a refund using appfee.refunds.retrieve('refund_id')"
24
+ raise NotImplementedError,
25
+ "Application fee refunds cannot be retrieved without an " \
26
+ "application fee ID. Retrieve an application fee refund using " \
27
+ "`ApplicationFee.retrieve_refund('fee_id', 'refund_id')`"
20
28
  end
21
29
  end
22
30
  end
@@ -15,18 +15,30 @@ module Stripe
15
15
 
16
16
  def resource_url
17
17
  if respond_to?(:customer)
18
- "#{Customer.resource_url}/#{CGI.escape(customer)}/sources/#{CGI.escape(id)}"
18
+ "#{Customer.resource_url}/#{CGI.escape(customer)}/sources" \
19
+ "/#{CGI.escape(id)}"
19
20
  elsif respond_to?(:account)
20
- "#{Account.resource_url}/#{CGI.escape(account)}/external_accounts/#{CGI.escape(id)}"
21
+ "#{Account.resource_url}/#{CGI.escape(account)}/external_accounts" \
22
+ "/#{CGI.escape(id)}"
21
23
  end
22
24
  end
23
25
 
24
26
  def self.update(_id, _params = nil, _opts = nil)
25
- raise NotImplementedError, "Bank accounts cannot be updated without an account ID. Update a bank account by using `a = account.external_accounts.retrieve('card_id'); a.save`"
27
+ raise NotImplementedError,
28
+ "Bank accounts cannot be updated without a customer ID or an " \
29
+ " account ID. Update a bank account using " \
30
+ "`Customer.update_source('customer_id', 'bank_account_id', " \
31
+ "update_params)` or `Account.update_external_account(" \
32
+ "'account_id', 'bank_account_id', update_params)`"
26
33
  end
27
34
 
28
35
  def self.retrieve(_id, _opts = nil)
29
- raise NotImplementedError, "Bank accounts cannot be retrieved without an account ID. Retrieve a bank account using account.external_accounts.retrieve('card_id')"
36
+ raise NotImplementedError,
37
+ "Bank accounts cannot be retrieve without a customer ID or an " \
38
+ "account ID. Retrieve a bank account using " \
39
+ "`Customer.retrieve_source('customer_id', 'bank_account_id')` " \
40
+ "or `Account.retrieve_external_account('account_id', " \
41
+ "'bank_account_id')`"
30
42
  end
31
43
  end
32
44
  end