stripe 5.22.0 → 5.26.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (97) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +4 -4
  3. data/.travis.yml +1 -3
  4. data/CHANGELOG.md +16 -0
  5. data/README.md +22 -22
  6. data/VERSION +1 -1
  7. data/lib/stripe.rb +32 -166
  8. data/lib/stripe/api_operations/create.rb +1 -1
  9. data/lib/stripe/api_operations/delete.rb +7 -3
  10. data/lib/stripe/api_operations/list.rb +1 -1
  11. data/lib/stripe/api_operations/nested_resource.rb +6 -5
  12. data/lib/stripe/api_operations/request.rb +19 -3
  13. data/lib/stripe/api_operations/save.rb +7 -4
  14. data/lib/stripe/api_resource.rb +4 -3
  15. data/lib/stripe/list_object.rb +2 -2
  16. data/lib/stripe/oauth.rb +3 -3
  17. data/lib/stripe/object_types.rb +2 -0
  18. data/lib/stripe/resources.rb +2 -0
  19. data/lib/stripe/resources/account.rb +2 -1
  20. data/lib/stripe/resources/account_link.rb +1 -0
  21. data/lib/stripe/resources/apple_pay_domain.rb +1 -0
  22. data/lib/stripe/resources/application_fee.rb +1 -0
  23. data/lib/stripe/resources/balance.rb +1 -0
  24. data/lib/stripe/resources/balance_transaction.rb +1 -0
  25. data/lib/stripe/resources/bank_account.rb +2 -1
  26. data/lib/stripe/resources/billing_portal/session.rb +1 -0
  27. data/lib/stripe/resources/bitcoin_receiver.rb +1 -0
  28. data/lib/stripe/resources/card.rb +1 -0
  29. data/lib/stripe/resources/charge.rb +1 -0
  30. data/lib/stripe/resources/checkout/session.rb +1 -0
  31. data/lib/stripe/resources/country_spec.rb +1 -0
  32. data/lib/stripe/resources/coupon.rb +1 -0
  33. data/lib/stripe/resources/credit_note.rb +3 -2
  34. data/lib/stripe/resources/customer.rb +2 -1
  35. data/lib/stripe/resources/dispute.rb +1 -0
  36. data/lib/stripe/resources/ephemeral_key.rb +1 -0
  37. data/lib/stripe/resources/event.rb +1 -0
  38. data/lib/stripe/resources/exchange_rate.rb +1 -0
  39. data/lib/stripe/resources/file.rb +1 -0
  40. data/lib/stripe/resources/file_link.rb +1 -0
  41. data/lib/stripe/resources/invoice.rb +3 -2
  42. data/lib/stripe/resources/invoice_item.rb +1 -0
  43. data/lib/stripe/resources/issuing/authorization.rb +1 -0
  44. data/lib/stripe/resources/issuing/card.rb +1 -0
  45. data/lib/stripe/resources/issuing/cardholder.rb +1 -0
  46. data/lib/stripe/resources/issuing/dispute.rb +12 -0
  47. data/lib/stripe/resources/issuing/transaction.rb +1 -0
  48. data/lib/stripe/resources/mandate.rb +1 -0
  49. data/lib/stripe/resources/order.rb +1 -0
  50. data/lib/stripe/resources/order_return.rb +1 -0
  51. data/lib/stripe/resources/payment_intent.rb +1 -0
  52. data/lib/stripe/resources/payment_method.rb +1 -0
  53. data/lib/stripe/resources/payout.rb +1 -0
  54. data/lib/stripe/resources/plan.rb +1 -0
  55. data/lib/stripe/resources/price.rb +1 -0
  56. data/lib/stripe/resources/product.rb +1 -0
  57. data/lib/stripe/resources/promotion_code.rb +12 -0
  58. data/lib/stripe/resources/radar/early_fraud_warning.rb +1 -0
  59. data/lib/stripe/resources/radar/value_list.rb +1 -0
  60. data/lib/stripe/resources/radar/value_list_item.rb +1 -0
  61. data/lib/stripe/resources/recipient.rb +1 -0
  62. data/lib/stripe/resources/refund.rb +1 -0
  63. data/lib/stripe/resources/reporting/report_run.rb +1 -0
  64. data/lib/stripe/resources/reporting/report_type.rb +1 -0
  65. data/lib/stripe/resources/review.rb +1 -0
  66. data/lib/stripe/resources/setup_attempt.rb +10 -0
  67. data/lib/stripe/resources/setup_intent.rb +1 -0
  68. data/lib/stripe/resources/sigma/scheduled_query_run.rb +1 -0
  69. data/lib/stripe/resources/sku.rb +1 -0
  70. data/lib/stripe/resources/source.rb +4 -3
  71. data/lib/stripe/resources/subscription.rb +1 -0
  72. data/lib/stripe/resources/subscription_item.rb +2 -1
  73. data/lib/stripe/resources/subscription_schedule.rb +1 -0
  74. data/lib/stripe/resources/tax_rate.rb +1 -0
  75. data/lib/stripe/resources/terminal/connection_token.rb +1 -0
  76. data/lib/stripe/resources/terminal/location.rb +1 -0
  77. data/lib/stripe/resources/terminal/reader.rb +1 -0
  78. data/lib/stripe/resources/three_d_secure.rb +1 -0
  79. data/lib/stripe/resources/token.rb +1 -0
  80. data/lib/stripe/resources/topup.rb +1 -0
  81. data/lib/stripe/resources/transfer.rb +1 -0
  82. data/lib/stripe/resources/webhook_endpoint.rb +1 -0
  83. data/lib/stripe/stripe_configuration.rb +167 -0
  84. data/lib/stripe/stripe_object.rb +1 -1
  85. data/lib/stripe/version.rb +1 -1
  86. data/test/stripe/account_link_test.rb +3 -3
  87. data/test/stripe/api_resource_test.rb +7 -7
  88. data/test/stripe/customer_card_test.rb +6 -0
  89. data/test/stripe/issuing/dispute_test.rb +20 -1
  90. data/test/stripe/product_test.rb +1 -2
  91. data/test/stripe/promotion_code_test.rb +42 -0
  92. data/test/stripe/setup_attempt_test.rb +16 -0
  93. data/test/stripe/stripe_configuration_test.rb +128 -0
  94. data/test/stripe/subscription_item_test.rb +1 -1
  95. data/test/stripe_test.rb +88 -19
  96. data/test/test_helper.rb +1 -1
  97. metadata +11 -2
@@ -6,7 +6,7 @@ module Stripe
6
6
  def list(filters = {}, opts = {})
7
7
  opts = Util.normalize_opts(opts)
8
8
 
9
- resp, opts = request(:get, resource_url, filters, opts)
9
+ resp, opts = execute_resource_request(:get, resource_url, filters, opts)
10
10
  obj = ListObject.construct_from(resp.data, opts)
11
11
 
12
12
  # set filters so that we can fetch the same limit, expansions, and
@@ -31,35 +31,36 @@ module Stripe
31
31
  define_singleton_method(:"create_#{resource}") \
32
32
  do |id, params = {}, opts = {}|
33
33
  url = send(resource_url_method, id)
34
- resp, opts = request(:post, url, params, opts)
34
+ resp, opts = execute_resource_request(:post, url, params, opts)
35
35
  Util.convert_to_stripe_object(resp.data, opts)
36
36
  end
37
37
  when :retrieve
38
38
  define_singleton_method(:"retrieve_#{resource}") \
39
39
  do |id, nested_id, opts = {}|
40
40
  url = send(resource_url_method, id, nested_id)
41
- resp, opts = request(:get, url, {}, opts)
41
+ resp, opts = execute_resource_request(:get, url, {}, opts)
42
42
  Util.convert_to_stripe_object(resp.data, opts)
43
43
  end
44
44
  when :update
45
45
  define_singleton_method(:"update_#{resource}") \
46
46
  do |id, nested_id, params = {}, opts = {}|
47
47
  url = send(resource_url_method, id, nested_id)
48
- resp, opts = request(:post, url, params, opts)
48
+ resp, opts = execute_resource_request(:post, url, params, opts)
49
49
  Util.convert_to_stripe_object(resp.data, opts)
50
50
  end
51
51
  when :delete
52
52
  define_singleton_method(:"delete_#{resource}") \
53
53
  do |id, nested_id, params = {}, opts = {}|
54
54
  url = send(resource_url_method, id, nested_id)
55
- resp, opts = request(:delete, url, params, opts)
55
+ resp, opts = execute_resource_request(:delete, url, params,
56
+ opts)
56
57
  Util.convert_to_stripe_object(resp.data, opts)
57
58
  end
58
59
  when :list
59
60
  define_singleton_method(:"list_#{resource_plural}") \
60
61
  do |id, params = {}, opts = {}|
61
62
  url = send(resource_url_method, id)
62
- resp, opts = request(:get, url, params, opts)
63
+ resp, opts = execute_resource_request(:get, url, params, opts)
63
64
  Util.convert_to_stripe_object(resp.data, opts)
64
65
  end
65
66
  else
@@ -4,7 +4,8 @@ module Stripe
4
4
  module APIOperations
5
5
  module Request
6
6
  module ClassMethods
7
- def request(method, url, params = {}, opts = {})
7
+ def execute_resource_request(method, url,
8
+ params = {}, opts = {})
8
9
  params ||= {}
9
10
 
10
11
  error_on_invalid_params(params)
@@ -36,6 +37,17 @@ module Stripe
36
37
  [resp, opts_to_persist]
37
38
  end
38
39
 
40
+ # This method used to be called `request`, but it's such a short name
41
+ # that it eventually conflicted with the name of a field on an API
42
+ # resource (specifically, `Event#request`), so it was renamed to
43
+ # something more unique.
44
+ #
45
+ # The former name had been around for just about forever though, and
46
+ # although all internal uses have been renamed, I've left this alias in
47
+ # place for backwards compatibility. Consider removing it on the next
48
+ # major.
49
+ alias request execute_resource_request
50
+
39
51
  private def error_on_non_string_user_opts(opts)
40
52
  Util::OPTS_USER_SPECIFIED.each do |opt|
41
53
  next unless opts.key?(opt)
@@ -71,10 +83,14 @@ module Stripe
71
83
  base.extend(ClassMethods)
72
84
  end
73
85
 
74
- protected def request(method, url, params = {}, opts = {})
86
+ protected def execute_resource_request(method, url,
87
+ params = {}, opts = {})
75
88
  opts = @opts.merge(Util.normalize_opts(opts))
76
- self.class.request(method, url, params, opts)
89
+ self.class.execute_resource_request(method, url, params, opts)
77
90
  end
91
+
92
+ # See notes on `alias` above.
93
+ alias request execute_resource_request
78
94
  end
79
95
  end
80
96
  end
@@ -15,7 +15,8 @@ module Stripe
15
15
  # * +opts+ - A Hash of additional options (separate from the params /
16
16
  # object values) to be added to the request. E.g. to allow for an
17
17
  # idempotency_key to be passed in the request headers, or for the
18
- # api_key to be overwritten. See {APIOperations::Request.request}.
18
+ # api_key to be overwritten. See
19
+ # {APIOperations::Request.execute_resource_request}.
19
20
  def update(id, params = {}, opts = {})
20
21
  params.each_key do |k|
21
22
  if protected_fields.include?(k)
@@ -23,7 +24,8 @@ module Stripe
23
24
  end
24
25
  end
25
26
 
26
- resp, opts = request(:post, "#{resource_url}/#{id}", params, opts)
27
+ resp, opts = execute_resource_request(:post, "#{resource_url}/#{id}",
28
+ params, opts)
27
29
  Util.convert_to_stripe_object(resp.data, opts)
28
30
  end
29
31
  end
@@ -43,7 +45,8 @@ module Stripe
43
45
  # * +opts+ - A Hash of additional options (separate from the params /
44
46
  # object values) to be added to the request. E.g. to allow for an
45
47
  # idempotency_key to be passed in the request headers, or for the
46
- # api_key to be overwritten. See {APIOperations::Request.request}.
48
+ # api_key to be overwritten. See
49
+ # {APIOperations::Request.execute_resource_request}.
47
50
  def save(params = {}, opts = {})
48
51
  # We started unintentionally (sort of) allowing attributes sent to
49
52
  # +save+ to override values used during the update. So as not to break
@@ -59,7 +62,7 @@ module Stripe
59
62
  # generated a uri for this object with an identifier baked in
60
63
  values.delete(:id)
61
64
 
62
- resp, opts = request(:post, save_url, values, opts)
65
+ resp, opts = execute_resource_request(:post, save_url, values, opts)
63
66
  initialize_from(resp.data, opts)
64
67
  end
65
68
 
@@ -76,7 +76,7 @@ module Stripe
76
76
  end
77
77
 
78
78
  url = "#{resource_url}/#{CGI.escape(id)}/#{CGI.escape(http_path)}"
79
- resp, opts = request(http_verb, url, params, opts)
79
+ resp, opts = execute_resource_request(http_verb, url, params, opts)
80
80
  Util.convert_to_stripe_object(resp.data, opts)
81
81
  end
82
82
  end
@@ -93,7 +93,8 @@ module Stripe
93
93
  end
94
94
 
95
95
  def refresh
96
- resp, opts = request(:get, resource_url, @retrieve_params)
96
+ resp, opts = execute_resource_request(:get, resource_url,
97
+ @retrieve_params)
97
98
  initialize_from(resp.data, opts)
98
99
  end
99
100
 
@@ -105,7 +106,7 @@ module Stripe
105
106
  end
106
107
 
107
108
  protected def request_stripe_object(method:, path:, params:, opts: {})
108
- resp, opts = request(method, path, params, opts)
109
+ resp, opts = execute_resource_request(method, path, params, opts)
109
110
 
110
111
  # If we're getting back this thing, update; otherwise, instantiate.
111
112
  if Util.object_name_matches_class?(resp.data[:object], self.class)
@@ -92,8 +92,8 @@ module Stripe
92
92
 
93
93
  def retrieve(id, opts = {})
94
94
  id, retrieve_params = Util.normalize_id(id)
95
- resp, opts = request(:get, "#{resource_url}/#{CGI.escape(id)}",
96
- retrieve_params, opts)
95
+ url = "#{resource_url}/#{CGI.escape(id)}"
96
+ resp, opts = execute_resource_request(:get, url, retrieve_params, opts)
97
97
  Util.convert_to_stripe_object(resp.data, opts)
98
98
  end
99
99
 
@@ -5,7 +5,7 @@ module Stripe
5
5
  module OAuthOperations
6
6
  extend APIOperations::Request::ClassMethods
7
7
 
8
- def self.request(method, url, params, opts)
8
+ def self.execute_resource_request(method, url, params, opts)
9
9
  opts = Util.normalize_opts(opts)
10
10
  opts[:client] ||= StripeClient.active_client
11
11
  opts[:api_base] ||= Stripe.connect_base
@@ -44,7 +44,7 @@ module Stripe
44
44
  def self.token(params = {}, opts = {})
45
45
  opts = Util.normalize_opts(opts)
46
46
  opts[:api_key] = params[:client_secret] if params[:client_secret]
47
- resp, opts = OAuthOperations.request(
47
+ resp, opts = OAuthOperations.execute_resource_request(
48
48
  :post, "/oauth/token", params, opts
49
49
  )
50
50
  # This is just going to return a generic StripeObject, but that's okay
@@ -54,7 +54,7 @@ module Stripe
54
54
  def self.deauthorize(params = {}, opts = {})
55
55
  opts = Util.normalize_opts(opts)
56
56
  params[:client_id] = get_client_id(params)
57
- resp, opts = OAuthOperations.request(
57
+ resp, opts = OAuthOperations.execute_resource_request(
58
58
  :post, "/oauth/deauthorize", params, opts
59
59
  )
60
60
  # This is just going to return a generic StripeObject, but that's okay
@@ -61,6 +61,7 @@ module Stripe
61
61
  Plan::OBJECT_NAME => Plan,
62
62
  Price::OBJECT_NAME => Price,
63
63
  Product::OBJECT_NAME => Product,
64
+ PromotionCode::OBJECT_NAME => PromotionCode,
64
65
  Radar::EarlyFraudWarning::OBJECT_NAME => Radar::EarlyFraudWarning,
65
66
  Radar::ValueList::OBJECT_NAME => Radar::ValueList,
66
67
  Radar::ValueListItem::OBJECT_NAME => Radar::ValueListItem,
@@ -72,6 +73,7 @@ module Stripe
72
73
  Reversal::OBJECT_NAME => Reversal,
73
74
  Review::OBJECT_NAME => Review,
74
75
  SKU::OBJECT_NAME => SKU,
76
+ SetupAttempt::OBJECT_NAME => SetupAttempt,
75
77
  SetupIntent::OBJECT_NAME => SetupIntent,
76
78
  Sigma::ScheduledQueryRun::OBJECT_NAME => Sigma::ScheduledQueryRun,
77
79
  Source::OBJECT_NAME => Source,
@@ -50,6 +50,7 @@ require "stripe/resources/person"
50
50
  require "stripe/resources/plan"
51
51
  require "stripe/resources/price"
52
52
  require "stripe/resources/product"
53
+ require "stripe/resources/promotion_code"
53
54
  require "stripe/resources/radar/early_fraud_warning"
54
55
  require "stripe/resources/radar/value_list"
55
56
  require "stripe/resources/radar/value_list_item"
@@ -60,6 +61,7 @@ require "stripe/resources/reporting/report_run"
60
61
  require "stripe/resources/reporting/report_type"
61
62
  require "stripe/resources/reversal"
62
63
  require "stripe/resources/review"
64
+ require "stripe/resources/setup_attempt"
63
65
  require "stripe/resources/setup_intent"
64
66
  require "stripe/resources/sigma/scheduled_query_run"
65
67
  require "stripe/resources/sku"
@@ -1,3 +1,4 @@
1
+ # File generated from our OpenAPI spec
1
2
  # frozen_string_literal: true
2
3
 
3
4
  module Stripe
@@ -64,7 +65,7 @@ module Stripe
64
65
  end
65
66
 
66
67
  def persons(params = {}, opts = {})
67
- resp, opts = request(:get, resource_url + "/persons", params, opts)
68
+ resp, opts = execute_resource_request(:get, resource_url + "/persons", params, opts)
68
69
  Util.convert_to_stripe_object(resp.data, opts)
69
70
  end
70
71
 
@@ -1,3 +1,4 @@
1
+ # File generated from our OpenAPI spec
1
2
  # frozen_string_literal: true
2
3
 
3
4
  module Stripe
@@ -1,3 +1,4 @@
1
+ # File generated from our OpenAPI spec
1
2
  # frozen_string_literal: true
2
3
 
3
4
  module Stripe
@@ -1,3 +1,4 @@
1
+ # File generated from our OpenAPI spec
1
2
  # frozen_string_literal: true
2
3
 
3
4
  module Stripe
@@ -1,3 +1,4 @@
1
+ # File generated from our OpenAPI spec
1
2
  # frozen_string_literal: true
2
3
 
3
4
  module Stripe
@@ -1,3 +1,4 @@
1
+ # File generated from our OpenAPI spec
1
2
  # frozen_string_literal: true
2
3
 
3
4
  module Stripe
@@ -1,3 +1,4 @@
1
+ # File generated from our OpenAPI spec
1
2
  # frozen_string_literal: true
2
3
 
3
4
  module Stripe
@@ -9,7 +10,7 @@ module Stripe
9
10
  OBJECT_NAME = "bank_account"
10
11
 
11
12
  def verify(params = {}, opts = {})
12
- resp, opts = request(:post, resource_url + "/verify", params, opts)
13
+ resp, opts = execute_resource_request(:post, resource_url + "/verify", params, opts)
13
14
  initialize_from(resp.data, opts)
14
15
  end
15
16
 
@@ -1,3 +1,4 @@
1
+ # File generated from our OpenAPI spec
1
2
  # frozen_string_literal: true
2
3
 
3
4
  module Stripe
@@ -1,3 +1,4 @@
1
+ # File generated from our OpenAPI spec
1
2
  # frozen_string_literal: true
2
3
 
3
4
  module Stripe
@@ -1,3 +1,4 @@
1
+ # File generated from our OpenAPI spec
1
2
  # frozen_string_literal: true
2
3
 
3
4
  module Stripe
@@ -1,3 +1,4 @@
1
+ # File generated from our OpenAPI spec
1
2
  # frozen_string_literal: true
2
3
 
3
4
  module Stripe
@@ -1,3 +1,4 @@
1
+ # File generated from our OpenAPI spec
1
2
  # frozen_string_literal: true
2
3
 
3
4
  module Stripe
@@ -1,3 +1,4 @@
1
+ # File generated from our OpenAPI spec
1
2
  # frozen_string_literal: true
2
3
 
3
4
  module Stripe
@@ -1,3 +1,4 @@
1
+ # File generated from our OpenAPI spec
1
2
  # frozen_string_literal: true
2
3
 
3
4
  module Stripe
@@ -1,3 +1,4 @@
1
+ # File generated from our OpenAPI spec
1
2
  # frozen_string_literal: true
2
3
 
3
4
  module Stripe
@@ -20,12 +21,12 @@ module Stripe
20
21
  end
21
22
 
22
23
  def self.preview(params, opts = {})
23
- resp, opts = request(:get, resource_url + "/preview", params, opts)
24
+ resp, opts = execute_resource_request(:get, resource_url + "/preview", params, opts)
24
25
  Util.convert_to_stripe_object(resp.data, opts)
25
26
  end
26
27
 
27
28
  def self.list_preview_line_items(params, opts = {})
28
- resp, opts = request(:get, resource_url + "/preview/lines", params, opts)
29
+ resp, opts = execute_resource_request(:get, resource_url + "/preview/lines", params, opts)
29
30
  Util.convert_to_stripe_object(resp.data, opts)
30
31
  end
31
32
  end
@@ -1,3 +1,4 @@
1
+ # File generated from our OpenAPI spec
1
2
  # frozen_string_literal: true
2
3
 
3
4
  module Stripe
@@ -28,7 +29,7 @@ module Stripe
28
29
  end
29
30
 
30
31
  def delete_discount
31
- resp, opts = request(:delete, resource_url + "/discount")
32
+ resp, opts = execute_resource_request(:delete, resource_url + "/discount")
32
33
  initialize_from(resp.data, opts, true)
33
34
  end
34
35
  end
@@ -1,3 +1,4 @@
1
+ # File generated from our OpenAPI spec
1
2
  # frozen_string_literal: true
2
3
 
3
4
  module Stripe
@@ -1,3 +1,4 @@
1
+ # File generated from our OpenAPI spec
1
2
  # frozen_string_literal: true
2
3
 
3
4
  module Stripe
@@ -1,3 +1,4 @@
1
+ # File generated from our OpenAPI spec
1
2
  # frozen_string_literal: true
2
3
 
3
4
  module Stripe
@@ -1,3 +1,4 @@
1
+ # File generated from our OpenAPI spec
1
2
  # frozen_string_literal: true
2
3
 
3
4
  module Stripe
@@ -1,3 +1,4 @@
1
+ # File generated from our OpenAPI spec
1
2
  # frozen_string_literal: true
2
3
 
3
4
  module Stripe
@@ -1,3 +1,4 @@
1
+ # File generated from our OpenAPI spec
1
2
  # frozen_string_literal: true
2
3
 
3
4
  module Stripe
@@ -1,3 +1,4 @@
1
+ # File generated from our OpenAPI spec
1
2
  # frozen_string_literal: true
2
3
 
3
4
  module Stripe
@@ -61,12 +62,12 @@ module Stripe
61
62
  end
62
63
 
63
64
  def self.upcoming(params, opts = {})
64
- resp, opts = request(:get, resource_url + "/upcoming", params, opts)
65
+ resp, opts = execute_resource_request(:get, resource_url + "/upcoming", params, opts)
65
66
  Util.convert_to_stripe_object(resp.data, opts)
66
67
  end
67
68
 
68
69
  def self.list_upcoming_line_items(params, opts = {})
69
- resp, opts = request(:get, resource_url + "/upcoming/lines", params, opts)
70
+ resp, opts = execute_resource_request(:get, resource_url + "/upcoming/lines", params, opts)
70
71
  Util.convert_to_stripe_object(resp.data, opts)
71
72
  end
72
73
  end
@@ -1,3 +1,4 @@
1
+ # File generated from our OpenAPI spec
1
2
  # frozen_string_literal: true
2
3
 
3
4
  module Stripe
@@ -1,3 +1,4 @@
1
+ # File generated from our OpenAPI spec
1
2
  # frozen_string_literal: true
2
3
 
3
4
  module Stripe
@@ -1,3 +1,4 @@
1
+ # File generated from our OpenAPI spec
1
2
  # frozen_string_literal: true
2
3
 
3
4
  module Stripe
@@ -1,3 +1,4 @@
1
+ # File generated from our OpenAPI spec
1
2
  # frozen_string_literal: true
2
3
 
3
4
  module Stripe