stripe 10.2.0.pre.beta.1 → 10.3.0.pre.beta.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (38) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +16 -0
  3. data/Gemfile +5 -2
  4. data/OPENAPI_VERSION +1 -1
  5. data/Rakefile +7 -5
  6. data/VERSION +1 -1
  7. data/bin/stripe-console +1 -1
  8. data/lib/stripe/api_operations/request.rb +3 -5
  9. data/lib/stripe/api_operations/save.rb +5 -7
  10. data/lib/stripe/api_resource_test_helpers.rb +2 -2
  11. data/lib/stripe/connection_manager.rb +4 -6
  12. data/lib/stripe/errors.rb +3 -11
  13. data/lib/stripe/instrumentation.rb +5 -21
  14. data/lib/stripe/multipart_encoder.rb +7 -7
  15. data/lib/stripe/oauth.rb +6 -6
  16. data/lib/stripe/object_types.rb +3 -0
  17. data/lib/stripe/request_signing_authenticator.rb +4 -8
  18. data/lib/stripe/resources/account.rb +6 -10
  19. data/lib/stripe/resources/alipay_account.rb +1 -1
  20. data/lib/stripe/resources/application_fee_refund.rb +1 -1
  21. data/lib/stripe/resources/bank_account.rb +2 -2
  22. data/lib/stripe/resources/capability.rb +1 -1
  23. data/lib/stripe/resources/climate/order.rb +34 -0
  24. data/lib/stripe/resources/climate/product.rb +14 -0
  25. data/lib/stripe/resources/climate/supplier.rb +13 -0
  26. data/lib/stripe/resources/event.rb +2 -2
  27. data/lib/stripe/resources/file.rb +2 -4
  28. data/lib/stripe/resources/reversal.rb +1 -1
  29. data/lib/stripe/resources/tax_id.rb +1 -1
  30. data/lib/stripe/resources.rb +3 -0
  31. data/lib/stripe/stripe_client.rb +38 -55
  32. data/lib/stripe/stripe_configuration.rb +13 -30
  33. data/lib/stripe/stripe_object.rb +15 -18
  34. data/lib/stripe/stripe_response.rb +1 -3
  35. data/lib/stripe/util.rb +10 -12
  36. data/lib/stripe/version.rb +1 -1
  37. data/stripe.gemspec +3 -2
  38. metadata +6 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 5fa793f3d4ef260d1fc85f6f63707f504ae80f5770a1be07704671433a8c24a6
4
- data.tar.gz: 758d29fd73bb6785692ccb889307bd31b1dc927b49c44eb8bcadd7bb2c4635e0
3
+ metadata.gz: 99e6b9749e8b1212d2c4b42f40c49b220ea10132346b5c8a4eb96894bc06247f
4
+ data.tar.gz: 76680576e92e252db64df9543df2b1befde7dd1bff4c2d4d74fe946af068a60c
5
5
  SHA512:
6
- metadata.gz: a7be66b70e8b22ca37db88e726c9036229ce041a1f54db7a0a47354ebf6ab71153d53b1b0ae7d2ba50f020263a1c8f7f430c3eeb2d439e2595ff0d030b795c0e
7
- data.tar.gz: 5be94fd11a94e6fae066a0772108fa5146c4b97729a361ca1a4e7f61c474f641ab89875ecd6adf7f874be1611ad94b5c0c4b46750ba24190e80577253af7fef5
6
+ metadata.gz: c65eb672e988647ccb5844d722f57cb82d6d7ac2da7e4ee095678104ae8f2a04c2e2bb65abf34aecfcf235838b18cb4a93f6cd3b7d96075f2e4d8a7308b57efc
7
+ data.tar.gz: 8225c92b8ee117d57a968bbe13b2f9edc274ffae4fd3fd669a749a1e34a9efa1f34965db93ac435d7f8026ed5a1c40fc373b487e80a30be36a5eb0f2728037b0
data/CHANGELOG.md CHANGED
@@ -1,5 +1,21 @@
1
1
  # Changelog
2
2
 
3
+ ## 10.3.0-beta.1 - 2023-11-30
4
+ * [#1298](https://github.com/stripe/stripe-ruby/pull/1298) Update generated code for beta
5
+ * [#1296](https://github.com/stripe/stripe-ruby/pull/1296) Merge master into beta
6
+
7
+ ## 10.2.0 - 2023-11-30
8
+ * [#1292](https://github.com/stripe/stripe-ruby/pull/1292) Update generated code
9
+ * Add support for new resources `Climate.Order`, `Climate.Product`, and `Climate.Supplier`
10
+ * Add support for `cancel`, `create`, `list`, `retrieve`, and `update` methods on resource `Order`
11
+ * Add support for `list` and `retrieve` methods on resources `Product` and `Supplier`
12
+ * [#1295](https://github.com/stripe/stripe-ruby/pull/1295) Upgrade rubocop
13
+ * [#1291](https://github.com/stripe/stripe-ruby/pull/1291) Update generated code
14
+
15
+ * [#1290](https://github.com/stripe/stripe-ruby/pull/1290) Update generated code
16
+
17
+ * [#1288](https://github.com/stripe/stripe-ruby/pull/1288) Update generated code
18
+
3
19
  ## 10.2.0-beta.1 - 2023-11-02
4
20
  * [#1287](https://github.com/stripe/stripe-ruby/pull/1287) Update generated code for beta
5
21
  * Add support for `attach_payment_intent` method on resource `Invoice`
data/Gemfile CHANGED
@@ -23,10 +23,13 @@ group :development do
23
23
  # `Gemfile.lock` checked in, so to prevent good builds from suddenly going
24
24
  # bad, pin to a specific version number here. Try to keep this relatively
25
25
  # up-to-date, but it's not the end of the world if it's not.
26
- gem "rubocop", "0.80"
26
+ #
27
+ # The latest version of rubocop is only compatible with Ruby 2.7+
28
+ gem "rubocop", "1.57.2" if RUBY_VERSION >= "2.7"
27
29
 
28
30
  # jaro_winkler 1.5.5 installation fails for jruby
29
- gem "jaro_winkler", "1.5.4"
31
+ # don't install on truffleruby
32
+ gem "jaro_winkler", "1.5.4" unless RUBY_ENGINE == "truffleruby"
30
33
 
31
34
  platforms :mri do
32
35
  gem "byebug"
data/OPENAPI_VERSION CHANGED
@@ -1 +1 @@
1
- v645
1
+ v691
data/Rakefile CHANGED
@@ -1,7 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require "rake/testtask"
4
- require "rubocop/rake_task"
5
4
 
6
5
  task default: %i[test rubocop]
7
6
 
@@ -9,7 +8,10 @@ Rake::TestTask.new do |t|
9
8
  t.pattern = "./test/**/*_test.rb"
10
9
  end
11
10
 
12
- RuboCop::RakeTask.new
11
+ if RUBY_VERSION >= "2.7.0"
12
+ require "rubocop/rake_task"
13
+ RuboCop::RakeTask.new
14
+ end
13
15
 
14
16
  desc "Update bundled certs"
15
17
  task :update_certs do
@@ -17,7 +19,7 @@ task :update_certs do
17
19
  require "uri"
18
20
 
19
21
  fetch_file "https://curl.haxx.se/ca/cacert.pem",
20
- ::File.expand_path("../lib/data/ca-certificates.crt", __FILE__)
22
+ File.expand_path("lib/data/ca-certificates.crt", __dir__)
21
23
  end
22
24
 
23
25
  #
@@ -25,11 +27,11 @@ end
25
27
  #
26
28
 
27
29
  def fetch_file(uri, dest)
28
- ::File.open(dest, "w") do |file|
30
+ File.open(dest, "w") do |file|
29
31
  resp = Net::HTTP.get_response(URI.parse(uri))
30
32
  unless resp.code.to_i == 200
31
33
  abort("bad response when fetching: #{uri}\n" \
32
- "Status #{resp.code}: #{resp.body}")
34
+ "Status #{resp.code}: #{resp.body}")
33
35
  end
34
36
  file.write(resp.body)
35
37
  puts "Successfully fetched: #{uri}"
data/VERSION CHANGED
@@ -1 +1 @@
1
- 10.2.0-beta.1
1
+ 10.3.0-beta.1
data/bin/stripe-console CHANGED
@@ -5,7 +5,7 @@
5
5
  require "irb"
6
6
  require "irb/completion"
7
7
 
8
- require "#{::File.dirname(__FILE__)}/../lib/stripe"
8
+ require "#{File.dirname(__FILE__)}/../lib/stripe"
9
9
 
10
10
  # Config IRB to enable --simple-prompt and auto indent
11
11
  IRB.conf[:PROMPT_MODE] = :SIMPLE
@@ -89,7 +89,7 @@ module Stripe
89
89
 
90
90
  raise ArgumentError,
91
91
  "request option '#{opt}' should be a string value " \
92
- "(was a #{val.class})"
92
+ "(was a #{val.class})"
93
93
  end
94
94
  end
95
95
 
@@ -98,14 +98,12 @@ module Stripe
98
98
 
99
99
  raise ArgumentError,
100
100
  "request params should be either a Hash or nil " \
101
- "(was a #{params.class})"
101
+ "(was a #{params.class})"
102
102
  end
103
103
 
104
104
  private def warn_on_opts_in_params(params)
105
105
  Util::OPTS_USER_SPECIFIED.each do |opt|
106
- if params.key?(opt)
107
- warn("WARNING: '#{opt}' should be in opts instead of params.")
108
- end
106
+ warn("WARNING: '#{opt}' should be in opts instead of params.") if params.key?(opt)
109
107
  end
110
108
  end
111
109
  end
@@ -19,9 +19,7 @@ module Stripe
19
19
  # {APIOperations::Request.execute_resource_request}.
20
20
  def update(id, params = {}, opts = {})
21
21
  params.each_key do |k|
22
- if protected_fields.include?(k)
23
- raise ArgumentError, "Cannot update protected field: #{k}"
24
- end
22
+ raise ArgumentError, "Cannot update protected field: #{k}" if protected_fields.include?(k)
25
23
  end
26
24
 
27
25
  request_stripe_object(
@@ -64,7 +62,7 @@ module Stripe
64
62
 
65
63
  values = serialize_params(self).merge(params)
66
64
 
67
- # note that id gets removed here our call to #url above has already
65
+ # Please note that id gets removed here our call to #url above has already
68
66
  # generated a uri for this object with an identifier baked in
69
67
  values.delete(:id)
70
68
 
@@ -72,9 +70,9 @@ module Stripe
72
70
  initialize_from(resp.data, opts)
73
71
  end
74
72
  extend Gem::Deprecate
75
- deprecate :save, "the `update` class method (for examples"\
76
- " see https://github.com/stripe/stripe-ruby"\
77
- "/wiki/Migration-guide-for-v8)", 2022, 11
73
+ deprecate :save, "the `update` class method (for examples " \
74
+ "see https://github.com/stripe/stripe-ruby" \
75
+ "/wiki/Migration-guide-for-v8)", 2022, 11
78
76
 
79
77
  def self.included(base)
80
78
  # Set `metadata` as additive so that when it's set directly we remember
@@ -31,8 +31,8 @@ module Stripe
31
31
  end
32
32
 
33
33
  def self.resource_url
34
- "/v1/test_helpers/"\
35
- "#{self::RESOURCE_CLASS::OBJECT_NAME.downcase.tr('.', '/')}s"
34
+ "/v1/test_helpers/" \
35
+ "#{self::RESOURCE_CLASS::OBJECT_NAME.downcase.tr('.', '/')}s"
36
36
  end
37
37
 
38
38
  def resource_url
@@ -157,9 +157,7 @@ module Stripe
157
157
 
158
158
  connection.open_timeout = config.open_timeout
159
159
  connection.read_timeout = config.read_timeout
160
- if connection.respond_to?(:write_timeout=)
161
- connection.write_timeout = config.write_timeout
162
- end
160
+ connection.write_timeout = config.write_timeout if connection.respond_to?(:write_timeout=)
163
161
 
164
162
  connection.use_ssl = uri.scheme == "https"
165
163
 
@@ -192,9 +190,9 @@ module Stripe
192
190
 
193
191
  @verify_ssl_warned = true
194
192
  warn("WARNING: Running without SSL cert verification. " \
195
- "You should never do this in production. " \
196
- "Execute `Stripe.verify_ssl_certs = true` to enable " \
197
- "verification.")
193
+ "You should never do this in production. " \
194
+ "Execute `Stripe.verify_ssl_certs = true` to enable " \
195
+ "verification.")
198
196
  end
199
197
  end
200
198
  end
data/lib/stripe/errors.rb CHANGED
@@ -4,22 +4,14 @@ module Stripe
4
4
  # StripeError is the base error from which all other more specific Stripe
5
5
  # errors derive.
6
6
  class StripeError < StandardError
7
- attr_reader :message
7
+ attr_reader :message, :code, :error, :http_body, :http_headers, :http_status, :json_body, :request_id
8
8
 
9
9
  # Response contains a StripeResponse object that has some basic information
10
10
  # about the response that conveyed the error.
11
- attr_accessor :response
12
-
13
- attr_reader :code
14
- attr_reader :error
15
- attr_reader :http_body
16
- attr_reader :http_headers
17
- attr_reader :http_status
18
- attr_reader :json_body # equivalent to #data
19
- attr_reader :request_id
11
+ attr_accessor :response # equivalent to #data
20
12
 
21
13
  # Initializes a StripeError.
22
- def initialize(message = nil, http_status: nil, http_body: nil,
14
+ def initialize(message = nil, http_status: nil, http_body: nil, # rubocop:todo Lint/MissingSuper
23
15
  json_body: nil, http_headers: nil, code: nil)
24
16
  @message = message
25
17
  @http_status = http_status
@@ -4,8 +4,7 @@ module Stripe
4
4
  class Instrumentation
5
5
  # Event emitted on `request_begin` callback.
6
6
  class RequestBeginEvent
7
- attr_reader :method
8
- attr_reader :path
7
+ attr_reader :method, :path
9
8
 
10
9
  # Arbitrary user-provided data in the form of a Ruby hash that's passed
11
10
  # from subscribers on `request_begin` to subscribers on `request_end`.
@@ -27,16 +26,8 @@ module Stripe
27
26
 
28
27
  # Event emitted on `request_end` callback.
29
28
  class RequestEndEvent
30
- attr_reader :duration
31
- attr_reader :http_status
32
- attr_reader :method
33
- attr_reader :num_retries
34
- attr_reader :path
35
- attr_reader :request_id
36
- attr_reader :response_header
37
- attr_reader :response_body
38
- attr_reader :request_header
39
- attr_reader :request_body
29
+ attr_reader :duration, :http_status, :method, :num_retries, :path, :request_id, :response_header, :response_body,
30
+ :request_header, :request_body
40
31
 
41
32
  # Arbitrary user-provided data in the form of a Ruby hash that's passed
42
33
  # from subscribers on `request_begin` to subscribers on `request_end`.
@@ -62,12 +53,7 @@ module Stripe
62
53
  end
63
54
 
64
55
  class RequestContext
65
- attr_reader :duration
66
- attr_reader :method
67
- attr_reader :path
68
- attr_reader :request_id
69
- attr_reader :body
70
- attr_reader :header
56
+ attr_reader :duration, :method, :path, :request_id, :body, :header
71
57
 
72
58
  def initialize(duration:, context:, header:)
73
59
  @duration = duration
@@ -80,9 +66,7 @@ module Stripe
80
66
  end
81
67
 
82
68
  class ResponseContext
83
- attr_reader :http_status
84
- attr_reader :body
85
- attr_reader :header
69
+ attr_reader :http_status, :body, :header
86
70
 
87
71
  def initialize(http_status:, response:)
88
72
  @http_status = http_status
@@ -106,22 +106,22 @@ module Stripe
106
106
  end
107
107
 
108
108
  private def write_field(name, data, filename:)
109
- if !@first_field
110
- @body << "\r\n"
111
- else
109
+ if @first_field
112
110
  @first_field = false
111
+ else
112
+ @body << "\r\n"
113
113
  end
114
114
 
115
115
  @body << "--#{@boundary}\r\n"
116
116
 
117
117
  if filename
118
- @body << %(Content-Disposition: form-data) +
118
+ @body << (%(Content-Disposition: form-data) +
119
119
  %(; name="#{escape(name.to_s)}") +
120
- %(; filename="#{escape(filename)}"\r\n)
120
+ %(; filename="#{escape(filename)}"\r\n))
121
121
  @body << %(Content-Type: application/octet-stream\r\n)
122
122
  else
123
- @body << %(Content-Disposition: form-data) +
124
- %(; name="#{escape(name.to_s)}"\r\n)
123
+ @body << (%(Content-Disposition: form-data) +
124
+ %(; name="#{escape(name.to_s)}"\r\n))
125
125
  end
126
126
 
127
127
  @body << "\r\n"
data/lib/stripe/oauth.rb CHANGED
@@ -18,12 +18,12 @@ module Stripe
18
18
  client_id = params[:client_id] || Stripe.client_id
19
19
  unless client_id
20
20
  raise AuthenticationError, "No client_id provided. " \
21
- 'Set your client_id using "Stripe.client_id = <CLIENT-ID>". ' \
22
- "You can find your client_ids in your Stripe dashboard at " \
23
- "https://dashboard.stripe.com/account/applications/settings, " \
24
- "after registering your account as a platform. See " \
25
- "https://stripe.com/docs/connect/standalone-accounts for details, " \
26
- "or email support@stripe.com if you have any questions."
21
+ 'Set your client_id using "Stripe.client_id = <CLIENT-ID>". ' \
22
+ "You can find your client_ids in your Stripe dashboard at " \
23
+ "https://dashboard.stripe.com/account/applications/settings, " \
24
+ "after registering your account as a platform. See " \
25
+ "https://stripe.com/docs/connect/standalone-accounts for details, " \
26
+ "or email support@stripe.com if you have any questions."
27
27
  end
28
28
  client_id
29
29
  end
@@ -33,6 +33,9 @@ module Stripe
33
33
  CashBalance::OBJECT_NAME => CashBalance,
34
34
  Charge::OBJECT_NAME => Charge,
35
35
  Checkout::Session::OBJECT_NAME => Checkout::Session,
36
+ Climate::Order::OBJECT_NAME => Climate::Order,
37
+ Climate::Product::OBJECT_NAME => Climate::Product,
38
+ Climate::Supplier::OBJECT_NAME => Climate::Supplier,
36
39
  ConfirmationToken::OBJECT_NAME => ConfirmationToken,
37
40
  CountrySpec::OBJECT_NAME => CountrySpec,
38
41
  Coupon::OBJECT_NAME => Coupon,
@@ -13,12 +13,8 @@ module Stripe
13
13
  attr_reader :auth_token, :sign_lambda
14
14
 
15
15
  def initialize(auth_token, sign_lambda)
16
- unless auth_token.is_a?(String)
17
- raise ArgumentError, "auth_token must be a string"
18
- end
19
- unless sign_lambda.is_a?(Proc)
20
- raise ArgumentError, "sign_lambda must be a lambda"
21
- end
16
+ raise ArgumentError, "auth_token must be a string" unless auth_token.is_a?(String)
17
+ raise ArgumentError, "sign_lambda must be a lambda" unless sign_lambda.is_a?(Proc)
22
18
 
23
19
  @auth_token = auth_token
24
20
  @sign_lambda = sign_lambda
@@ -68,8 +64,8 @@ module Stripe
68
64
  private def encoded_signature(signature_base)
69
65
  Base64.strict_encode64(sign(signature_base))
70
66
  rescue StandardError
71
- raise AuthenticationError, "Encountered '#{e.message} (#{e.class})' "\
72
- "when calculating request signature."
67
+ raise AuthenticationError, "Encountered '#{e.message} (#{e.class})' " \
68
+ "when calculating request signature."
73
69
  end
74
70
 
75
71
  private def content_digest(content)
@@ -123,17 +123,13 @@ module Stripe
123
123
  end
124
124
 
125
125
  def serialize_params_account(_obj, update_hash, options = {})
126
- if (entity = @values[:legal_entity])
127
- if (owners = entity[:additional_owners])
128
- entity_update = update_hash[:legal_entity] ||= {}
129
- entity_update[:additional_owners] =
130
- serialize_additional_owners(entity, owners)
131
- end
126
+ if (entity = @values[:legal_entity]) && (owners = entity[:additional_owners])
127
+ entity_update = update_hash[:legal_entity] ||= {}
128
+ entity_update[:additional_owners] =
129
+ serialize_additional_owners(entity, owners)
132
130
  end
133
- if (individual = @values[:individual])
134
- if individual.is_a?(Person) && !update_hash.key?(:individual)
135
- update_hash[:individual] = individual.serialize_params(options)
136
- end
131
+ if (individual = @values[:individual]) && (individual.is_a?(Person) && !update_hash.key?(:individual))
132
+ update_hash[:individual] = individual.serialize_params(options)
137
133
  end
138
134
  update_hash
139
135
  end
@@ -14,7 +14,7 @@ module Stripe
14
14
  end
15
15
 
16
16
  "#{Customer.resource_url}/#{CGI.escape(customer)}/sources" \
17
- "/#{CGI.escape(id)}"
17
+ "/#{CGI.escape(id)}"
18
18
  end
19
19
 
20
20
  def self.update(_id, _params = nil, _opts = nil)
@@ -15,7 +15,7 @@ module Stripe
15
15
 
16
16
  def resource_url
17
17
  "#{ApplicationFee.resource_url}/#{CGI.escape(fee)}/refunds" \
18
- "/#{CGI.escape(id)}"
18
+ "/#{CGI.escape(id)}"
19
19
  end
20
20
 
21
21
  def self.update(_id, _params = nil, _opts = nil)
@@ -31,8 +31,8 @@ module Stripe
31
31
 
32
32
  def self.update(_id, _params = nil, _opts = nil)
33
33
  raise NotImplementedError,
34
- "Bank accounts cannot be updated without a customer ID or an " \
35
- " account ID. Update a bank account using " \
34
+ "Bank accounts cannot be updated without a customer ID or an " \
35
+ "account ID. Update a bank account using " \
36
36
  "`Customer.update_source('customer_id', 'bank_account_id', " \
37
37
  "update_params)` or `Account.update_external_account(" \
38
38
  "'account_id', 'bank_account_id', update_params)`"
@@ -17,7 +17,7 @@ module Stripe
17
17
  "Capabilities cannot be accessed without an account ID."
18
18
  end
19
19
  "#{Account.resource_url}/#{CGI.escape(account)}/capabilities" \
20
- "/#{CGI.escape(id)}"
20
+ "/#{CGI.escape(id)}"
21
21
  end
22
22
 
23
23
  def self.retrieve(_id, _opts = {})
@@ -0,0 +1,34 @@
1
+ # File generated from our OpenAPI spec
2
+ # frozen_string_literal: true
3
+
4
+ module Stripe
5
+ module Climate
6
+ # Orders represent your intent to purchase a particular Climate product. When you create an order, the
7
+ # payment is deducted from your merchant balance.
8
+ class Order < APIResource
9
+ extend Stripe::APIOperations::Create
10
+ extend Stripe::APIOperations::List
11
+ include Stripe::APIOperations::Save
12
+
13
+ OBJECT_NAME = "climate.order"
14
+
15
+ def cancel(params = {}, opts = {})
16
+ request_stripe_object(
17
+ method: :post,
18
+ path: format("/v1/climate/orders/%<order>s/cancel", { order: CGI.escape(self["id"]) }),
19
+ params: params,
20
+ opts: opts
21
+ )
22
+ end
23
+
24
+ def self.cancel(order, params = {}, opts = {})
25
+ request_stripe_object(
26
+ method: :post,
27
+ path: format("/v1/climate/orders/%<order>s/cancel", { order: CGI.escape(order) }),
28
+ params: params,
29
+ opts: opts
30
+ )
31
+ end
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,14 @@
1
+ # File generated from our OpenAPI spec
2
+ # frozen_string_literal: true
3
+
4
+ module Stripe
5
+ module Climate
6
+ # A Climate product represents a type of carbon removal unit available for reservation.
7
+ # You can retrieve it to see the current price and availability.
8
+ class Product < APIResource
9
+ extend Stripe::APIOperations::List
10
+
11
+ OBJECT_NAME = "climate.product"
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,13 @@
1
+ # File generated from our OpenAPI spec
2
+ # frozen_string_literal: true
3
+
4
+ module Stripe
5
+ module Climate
6
+ # A supplier of carbon removal.
7
+ class Supplier < APIResource
8
+ extend Stripe::APIOperations::List
9
+
10
+ OBJECT_NAME = "climate.supplier"
11
+ end
12
+ end
13
+ end
@@ -23,8 +23,8 @@ module Stripe
23
23
  # `Event` objects directly to an endpoint on your server. You can manage
24
24
  # webhooks in your
25
25
  # [account settings](https://dashboard.stripe.com/account/webhooks). Learn how
26
- # to [listen for events]
27
- # (/docs/webhooks) so that your integration can automatically trigger reactions.
26
+ # to [listen for events](https://stripe.com/docs/webhooks)
27
+ # so that your integration can automatically trigger reactions.
28
28
  #
29
29
  # When using [Connect](https://stripe.com/docs/connect), you can also receive event notifications
30
30
  # that occur in connected accounts. For these events, there's an
@@ -26,10 +26,8 @@ module Stripe
26
26
  end
27
27
 
28
28
  def self.create(params = {}, opts = {})
29
- if params[:file] && !params[:file].is_a?(String)
30
- unless params[:file].respond_to?(:read)
31
- raise ArgumentError, "file must respond to `#read`"
32
- end
29
+ if params[:file] && !params[:file].is_a?(String) && !params[:file].respond_to?(:read)
30
+ raise ArgumentError, "file must respond to `#read`"
33
31
  end
34
32
 
35
33
  config = opts[:client]&.config || Stripe.config
@@ -23,7 +23,7 @@ module Stripe
23
23
 
24
24
  def resource_url
25
25
  "#{Transfer.resource_url}/#{CGI.escape(transfer)}/reversals" \
26
- "/#{CGI.escape(id)}"
26
+ "/#{CGI.escape(id)}"
27
27
  end
28
28
 
29
29
  def self.update(_id, _params = nil, _opts = nil)
@@ -18,7 +18,7 @@ module Stripe
18
18
  "Tax IDs cannot be accessed without a customer ID."
19
19
  end
20
20
  "#{Customer.resource_url}/#{CGI.escape(customer)}/tax_ids" \
21
- "/#{CGI.escape(id)}"
21
+ "/#{CGI.escape(id)}"
22
22
  end
23
23
 
24
24
  def self.retrieve(_id, _opts = {})
@@ -22,6 +22,9 @@ require "stripe/resources/card"
22
22
  require "stripe/resources/cash_balance"
23
23
  require "stripe/resources/charge"
24
24
  require "stripe/resources/checkout/session"
25
+ require "stripe/resources/climate/order"
26
+ require "stripe/resources/climate/product"
27
+ require "stripe/resources/climate/supplier"
25
28
  require "stripe/resources/confirmation_token"
26
29
  require "stripe/resources/country_spec"
27
30
  require "stripe/resources/coupon"
@@ -36,8 +36,7 @@ module Stripe
36
36
  end
37
37
  end
38
38
 
39
- attr_reader :config
40
- attr_reader :options
39
+ attr_reader :config, :options
41
40
 
42
41
  # Gets a currently active `StripeClient`. Set for the current thread when
43
42
  # `StripeClient#request` is being run so that API operations being executed
@@ -80,9 +79,7 @@ module Stripe
80
79
  end
81
80
  end
82
81
 
83
- if thread_context.default_connection_managers.empty?
84
- pruned_contexts << thread_context
85
- end
82
+ pruned_contexts << thread_context if thread_context.default_connection_managers.empty?
86
83
  end
87
84
 
88
85
  @thread_contexts_with_connection_managers.subtract(pruned_contexts)
@@ -120,7 +117,7 @@ module Stripe
120
117
  when Net::OpenTimeout, Net::ReadTimeout
121
118
  # Retry on timeout-related problems (either on open or read).
122
119
  true
123
- when EOFError, Errno::ECONNREFUSED, Errno::ECONNRESET,
120
+ when EOFError, Errno::ECONNREFUSED, Errno::ECONNRESET, # rubocop:todo Lint/DuplicateBranch
124
121
  Errno::EHOSTUNREACH, Errno::ETIMEDOUT, SocketError
125
122
  # Destination refused the connection, the connection was reset, or a
126
123
  # variety of other connection failures. This could occur from a single
@@ -290,21 +287,21 @@ module Stripe
290
287
 
291
288
  ERROR_MESSAGE_CONNECTION =
292
289
  "Unexpected error communicating when trying to connect to " \
293
- "Stripe (%s). You may be seeing this message because your DNS is not " \
294
- "working or you don't have an internet connection. To check, try " \
295
- "running `host stripe.com` from the command line."
290
+ "Stripe (%s). You may be seeing this message because your DNS is not " \
291
+ "working or you don't have an internet connection. To check, try " \
292
+ "running `host stripe.com` from the command line."
296
293
  ERROR_MESSAGE_SSL =
297
294
  "Could not establish a secure connection to Stripe (%s), you " \
298
- "may need to upgrade your OpenSSL version. To check, try running " \
299
- "`openssl s_client -connect api.stripe.com:443` from the command " \
300
- "line."
295
+ "may need to upgrade your OpenSSL version. To check, try running " \
296
+ "`openssl s_client -connect api.stripe.com:443` from the command " \
297
+ "line."
301
298
 
302
299
  # Common error suffix sared by both connect and read timeout messages.
303
300
  ERROR_MESSAGE_TIMEOUT_SUFFIX =
304
301
  "Please check your internet connection and try again. " \
305
- "If this problem persists, you should check Stripe's service " \
306
- "status at https://status.stripe.com, or let us know at " \
307
- "support@stripe.com."
302
+ "If this problem persists, you should check Stripe's service " \
303
+ "status at https://status.stripe.com, or let us know at " \
304
+ "support@stripe.com."
308
305
 
309
306
  ERROR_MESSAGE_TIMEOUT_CONNECT = (
310
307
  "Timed out connecting to Stripe (%s). " +
@@ -496,9 +493,7 @@ module Stripe
496
493
  response_block =
497
494
  if block_given?
498
495
  lambda do |response|
499
- unless should_handle_as_error(response.code.to_i)
500
- response.read_body(&read_body_chunk_block)
501
- end
496
+ response.read_body(&read_body_chunk_block) unless should_handle_as_error(response.code.to_i)
502
497
  end
503
498
  end
504
499
 
@@ -523,26 +518,26 @@ module Stripe
523
518
  private def check_keys!(api_key, authenticator)
524
519
  if api_key && authenticator
525
520
  raise AuthenticationError, "Can't specify both API key " \
526
- "and authenticator. Either set your API key" \
527
- 'using "Stripe.api_key = <API-KEY>", or set your authenticator ' \
528
- 'using "Stripe.authenticator = <AUTHENTICATOR>"' \
521
+ "and authenticator. Either set your API key" \
522
+ 'using "Stripe.api_key = <API-KEY>", or set your authenticator ' \
523
+ 'using "Stripe.authenticator = <AUTHENTICATOR>"' \
529
524
  end
530
525
 
531
526
  unless api_key || authenticator
532
527
  # Default to missing API key error message for general users.
533
528
  raise AuthenticationError, "No API key provided. " \
534
- 'Set your API key using "Stripe.api_key = <API-KEY>". ' \
535
- "You can generate API keys from the Stripe web interface. " \
536
- "See https://stripe.com/api for details, or email " \
537
- "support@stripe.com if you have any questions."
529
+ 'Set your API key using "Stripe.api_key = <API-KEY>". ' \
530
+ "You can generate API keys from the Stripe web interface. " \
531
+ "See https://stripe.com/api for details, or email " \
532
+ "support@stripe.com if you have any questions."
538
533
  end
539
534
 
540
535
  return unless api_key =~ /\s/
541
536
 
542
537
  raise AuthenticationError, "Your API key is invalid, as it contains " \
543
- "whitespace. (HINT: You can double-check your API key from the " \
544
- "Stripe web interface. See https://stripe.com/api for details, or " \
545
- "email support@stripe.com if you have any questions.)"
538
+ "whitespace. (HINT: You can double-check your API key from the " \
539
+ "Stripe web interface. See https://stripe.com/api for details, or " \
540
+ "email support@stripe.com if you have any questions.)"
546
541
  end
547
542
 
548
543
  # Encodes a set of body parameters using multipart if `Content-Type` is set
@@ -571,15 +566,15 @@ module Stripe
571
566
  body = Util.encode_parameters(body_params)
572
567
  end
573
568
 
574
- if api_mode == :preview
575
- body_log = body
576
- else
577
- # We don't use `Util.encode_parameters` partly as an optimization (to
578
- # not redo work we've already done), and partly because the encoded
579
- # forms of certain characters introduce a lot of visual noise and it's
580
- # nice to have a clearer format for logs.
581
- body_log = flattened_params.map { |k, v| "#{k}=#{v}" }.join("&")
582
- end
569
+ body_log = if api_mode == :preview
570
+ body
571
+ else
572
+ # We don't use `Util.encode_parameters` partly as an optimization (to
573
+ # not redo work we've already done), and partly because the encoded
574
+ # forms of certain characters introduce a lot of visual noise and it's
575
+ # nice to have a clearer format for logs.
576
+ flattened_params.map { |k, v| "#{k}=#{v}" }.join("&")
577
+ end
583
578
 
584
579
  [body, body_log]
585
580
  end
@@ -605,9 +600,7 @@ module Stripe
605
600
  http_status = resp.code.to_i
606
601
  context = context.dup_from_response_headers(resp)
607
602
 
608
- if should_handle_as_error(http_status)
609
- handle_error_response(resp, context)
610
- end
603
+ handle_error_response(resp, context) if should_handle_as_error(http_status)
611
604
 
612
605
  log_response(context, request_start, http_status, resp.body, resp)
613
606
  notify_request_end(context, request_duration, http_status,
@@ -657,7 +650,7 @@ module Stripe
657
650
 
658
651
  # Only handle errors when we know we can do so, and re-raise otherwise.
659
652
  # This should be pretty infrequent.
660
- else
653
+ else # rubocop:todo Lint/DuplicateBranch
661
654
  raise
662
655
  end
663
656
  end
@@ -868,7 +861,7 @@ module Stripe
868
861
 
869
862
  if errors.nil?
870
863
  message = "Unexpected error #{error.class.name} communicating " \
871
- "with Stripe. Please let us know at support@stripe.com."
864
+ "with Stripe. Please let us know at support@stripe.com."
872
865
  end
873
866
 
874
867
  api_base ||= config.api_base
@@ -882,9 +875,7 @@ module Stripe
882
875
 
883
876
  private def request_headers(api_key, method, api_mode)
884
877
  user_agent = "Stripe/v1 RubyBindings/#{Stripe::VERSION}"
885
- unless Stripe.app_info.nil?
886
- user_agent += " " + format_app_info(Stripe.app_info)
887
- end
878
+ user_agent += " " + format_app_info(Stripe.app_info) unless Stripe.app_info.nil?
888
879
 
889
880
  headers = {
890
881
  "User-Agent" => user_agent,
@@ -996,16 +987,8 @@ module Stripe
996
987
  # that we can log certain information. It's useful because it means that we
997
988
  # don't have to pass around as many parameters.
998
989
  class RequestLogContext
999
- attr_accessor :body
1000
- attr_accessor :account
1001
- attr_accessor :api_key
1002
- attr_accessor :authenticator
1003
- attr_accessor :api_version
1004
- attr_accessor :idempotency_key
1005
- attr_accessor :method
1006
- attr_accessor :path
1007
- attr_accessor :query
1008
- attr_accessor :request_id
990
+ attr_accessor :body, :account, :api_key, :authenticator, :api_version, :idempotency_key, :method, :path, :query,
991
+ :request_id
1009
992
 
1010
993
  # The idea with this method is that we might want to update some of
1011
994
  # context information because a response that we've received from the API
@@ -25,27 +25,12 @@ module Stripe
25
25
  # If `.logger` is set, the value of `.log_level` is ignored. The decision on
26
26
  # what levels to print is entirely deferred to the logger.
27
27
  class StripeConfiguration
28
- attr_accessor :api_key
29
- attr_accessor :api_version
30
- attr_accessor :authenticator
31
- attr_accessor :client_id
32
- attr_accessor :enable_telemetry
33
- attr_accessor :logger
34
- attr_accessor :stripe_account
35
-
36
- attr_reader :api_base
37
- attr_reader :uploads_base
38
- attr_reader :connect_base
39
- attr_reader :ca_bundle_path
40
- attr_reader :log_level
41
- attr_reader :initial_network_retry_delay
42
- attr_reader :max_network_retries
43
- attr_reader :max_network_retry_delay
44
- attr_reader :open_timeout
45
- attr_reader :read_timeout
46
- attr_reader :write_timeout
47
- attr_reader :proxy
48
- attr_reader :verify_ssl_certs
28
+ attr_accessor :api_key, :api_version, :authenticator, :client_id, :enable_telemetry, :logger, :stripe_account
29
+
30
+ attr_reader :api_base, :uploads_base, :connect_base, :ca_bundle_path, :log_level, :initial_network_retry_delay,
31
+ # rubocop:todo Layout/LineLength
32
+ :max_network_retries, :max_network_retry_delay, :open_timeout, :read_timeout, :write_timeout, :proxy, :verify_ssl_certs
33
+ # rubocop:enable Layout/LineLength
49
34
 
50
35
  def self.setup
51
36
  new.tap do |instance|
@@ -97,8 +82,8 @@ module Stripe
97
82
 
98
83
  if !val.nil? && !levels.include?(val)
99
84
  raise ArgumentError,
100
- "log_level should only be set to `nil`, `debug`, `info`," \
101
- " or `error`"
85
+ "log_level should only be set to `nil`, `debug`, `info`, " \
86
+ "or `error`"
102
87
  end
103
88
  @log_level = val
104
89
  end
@@ -126,9 +111,7 @@ module Stripe
126
111
  end
127
112
 
128
113
  def write_timeout=(write_timeout)
129
- unless Net::HTTP.instance_methods.include?(:write_timeout=)
130
- raise NotImplementedError
131
- end
114
+ raise NotImplementedError unless Net::HTTP.instance_methods.include?(:write_timeout=)
132
115
 
133
116
  @write_timeout = write_timeout
134
117
  StripeClient.clear_all_connection_managers(config: self)
@@ -179,10 +162,10 @@ module Stripe
179
162
  # and is itself not thread safe.
180
163
  def ca_store
181
164
  @ca_store ||= begin
182
- store = OpenSSL::X509::Store.new
183
- store.add_file(ca_bundle_path)
184
- store
185
- end
165
+ store = OpenSSL::X509::Store.new
166
+ store.add_file(ca_bundle_path)
167
+ store
168
+ end
186
169
  end
187
170
 
188
171
  def enable_telemetry?
@@ -320,8 +320,8 @@ module Stripe
320
320
  # Here we swallow that error and issue a warning so at least
321
321
  # the program doesn't crash.
322
322
  warn("WARNING: Unable to remove method `#{method_name}`; " \
323
- "if custom, please consider renaming to a name that doesn't " \
324
- "collide with an API property name.")
323
+ "if custom, please consider renaming to a name that doesn't " \
324
+ "collide with an API property name.")
325
325
  end
326
326
  end
327
327
  end
@@ -351,17 +351,15 @@ module Stripe
351
351
  define_method(:"#{k}=") do |v|
352
352
  if v == ""
353
353
  raise ArgumentError, "You cannot set #{k} to an empty string. " \
354
- "We interpret empty strings as nil in requests. " \
355
- "You may set (object).#{k} = nil to delete the property."
354
+ "We interpret empty strings as nil in requests. " \
355
+ "You may set (object).#{k} = nil to delete the property."
356
356
  end
357
357
  @values[k] = Util.convert_to_stripe_object(v, @opts)
358
358
  dirty_value!(@values[k])
359
359
  @unsaved_values.add(k)
360
360
  end
361
361
 
362
- if [FalseClass, TrueClass].include?(values[k].class)
363
- define_method(:"#{k}?") { @values[k] }
364
- end
362
+ define_method(:"#{k}?") { @values[k] } if [FalseClass, TrueClass].include?(values[k].class)
365
363
  end
366
364
  end
367
365
  end
@@ -369,7 +367,6 @@ module Stripe
369
367
  # Disabling the cop because it's confused by the fact that the methods are
370
368
  # protected, but we do define `#respond_to_missing?` just below. Hopefully
371
369
  # this is fixed in more recent Rubocop versions.
372
- # rubocop:disable Style/MissingRespondToMissing
373
370
  protected def method_missing(name, *args)
374
371
  # TODO: only allow setting in updateable classes.
375
372
  if name.to_s.end_with?("=")
@@ -405,16 +402,14 @@ module Stripe
405
402
 
406
403
  raise NoMethodError,
407
404
  e.message + ". HINT: The '#{name}' attribute was set in the " \
408
- "past, however. It was then wiped when refreshing the object " \
409
- "with the result returned by Stripe's API, probably as a " \
410
- "result of a save(). The attributes currently available on " \
411
- "this object are: #{@values.keys.join(', ')}"
405
+ "past, however. It was then wiped when refreshing the object " \
406
+ "with the result returned by Stripe's API, probably as a " \
407
+ "result of a save(). The attributes currently available on " \
408
+ "this object are: #{@values.keys.join(', ')}"
412
409
  end
413
410
  end
414
- # rubocop:enable Style/MissingRespondToMissing
415
-
416
411
  protected def respond_to_missing?(symbol, include_private = false)
417
- @values && @values.key?(symbol) || super
412
+ (@values && @values.key?(symbol)) || super
418
413
  end
419
414
 
420
415
  # Re-initializes the object based on a hash of values (usually one that's
@@ -460,7 +455,8 @@ module Stripe
460
455
  self
461
456
  end
462
457
 
463
- protected def serialize_params_value(value, original, unsaved, force,
458
+ # rubocop:todo Metrics/PerceivedComplexity
459
+ protected def serialize_params_value(value, original, unsaved, force, # rubocop:todo Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
464
460
  key: nil)
465
461
  if value.nil?
466
462
  ""
@@ -494,8 +490,8 @@ module Stripe
494
490
  value
495
491
  else
496
492
  raise ArgumentError, "Cannot save property `#{key}` containing " \
497
- "an API resource. It doesn't appear to be persisted and is " \
498
- "not marked as `save_with_parent`."
493
+ "an API resource. It doesn't appear to be persisted and is " \
494
+ "not marked as `save_with_parent`."
499
495
  end
500
496
 
501
497
  elsif value.is_a?(Array)
@@ -535,6 +531,7 @@ module Stripe
535
531
  value
536
532
  end
537
533
  end
534
+ # rubocop:enable Metrics/PerceivedComplexity
538
535
 
539
536
  # Produces a deep copy of the given object including support for arrays,
540
537
  # hashes, and StripeObjects.
@@ -41,9 +41,7 @@ module Stripe
41
41
 
42
42
  def [](name)
43
43
  values = @hash[name.downcase]
44
- if values && values.count > 1
45
- warn("Duplicate header values for `#{name}`; returning only first")
46
- end
44
+ warn("Duplicate header values for `#{name}`; returning only first") if values && values.count > 1
47
45
  values ? values.first : nil
48
46
  end
49
47
  end
data/lib/stripe/util.rb CHANGED
@@ -80,8 +80,8 @@ module Stripe
80
80
  "id should be a string representing the ID of an API resource"
81
81
  end
82
82
 
83
- url = "#{target.resource_url}/"\
84
- "#{CGI.escape(id)}/"\
83
+ url = "#{target.resource_url}/" \
84
+ "#{CGI.escape(id)}/" \
85
85
  "#{CGI.escape(http_path)}"
86
86
 
87
87
  resp, opts = resource.execute_resource_request(
@@ -140,9 +140,7 @@ module Stripe
140
140
 
141
141
  # set filters so that we can fetch the same limit, expansions, and
142
142
  # predicates when accessing the next and previous pages
143
- if obj && (obj.is_a?(SearchResultObject) || obj.is_a?(ListObject))
144
- obj.filters = params.dup
145
- end
143
+ obj.filters = params.dup if obj && (obj.is_a?(SearchResultObject) || obj.is_a?(ListObject))
146
144
 
147
145
  obj
148
146
  else
@@ -154,7 +152,7 @@ module Stripe
154
152
  config = data.delete(:config) || Stripe.config
155
153
  logger = config.logger || Stripe.logger
156
154
  if !logger.nil? ||
157
- !config.log_level.nil? && config.log_level <= Stripe::LEVEL_ERROR
155
+ (!config.log_level.nil? && config.log_level <= Stripe::LEVEL_ERROR)
158
156
  log_internal(message, data, color: :cyan, level: Stripe::LEVEL_ERROR,
159
157
  logger: Stripe.logger, out: $stderr)
160
158
  end
@@ -164,7 +162,7 @@ module Stripe
164
162
  config = data.delete(:config) || Stripe.config
165
163
  logger = config.logger || Stripe.logger
166
164
  if !logger.nil? ||
167
- !config.log_level.nil? && config.log_level <= Stripe::LEVEL_INFO
165
+ (!config.log_level.nil? && config.log_level <= Stripe::LEVEL_INFO)
168
166
  log_internal(message, data, color: :cyan, level: Stripe::LEVEL_INFO,
169
167
  logger: Stripe.logger, out: $stdout)
170
168
  end
@@ -174,7 +172,7 @@ module Stripe
174
172
  config = data.delete(:config) || Stripe.config
175
173
  logger = config.logger || Stripe.logger
176
174
  if !logger.nil? ||
177
- !config.log_level.nil? && config.log_level <= Stripe::LEVEL_DEBUG
175
+ (!config.log_level.nil? && config.log_level <= Stripe::LEVEL_DEBUG)
178
176
  log_internal(message, data, color: :blue, level: Stripe::LEVEL_DEBUG,
179
177
  logger: Stripe.logger, out: $stdout)
180
178
  end
@@ -186,10 +184,10 @@ module Stripe
186
184
  new_hash = {}
187
185
  object.each do |key, value|
188
186
  key = (begin
189
- key.to_sym
190
- rescue StandardError
191
- key
192
- end) || key
187
+ key.to_sym
188
+ rescue StandardError
189
+ key
190
+ end) || key
193
191
  new_hash[key] = symbolize_names(value)
194
192
  end
195
193
  new_hash
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Stripe
4
- VERSION = "10.2.0-beta.1"
4
+ VERSION = "10.3.0-beta.1"
5
5
  end
data/stripe.gemspec CHANGED
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- $LOAD_PATH.unshift(::File.join(::File.dirname(__FILE__), "lib"))
3
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), "lib"))
4
4
 
5
5
  require "stripe/version"
6
6
 
@@ -24,6 +24,7 @@ Gem::Specification.new do |s|
24
24
  "github_repo" => "ssh://github.com/stripe/stripe-ruby",
25
25
  "homepage_uri" => "https://stripe.com/docs/api?lang=ruby",
26
26
  "source_code_uri" => "https://github.com/stripe/stripe-ruby",
27
+ "rubygems_mfa_required" => "false",
27
28
  }
28
29
 
29
30
  ignored = Regexp.union(
@@ -36,6 +37,6 @@ Gem::Specification.new do |s|
36
37
  )
37
38
  s.files = `git ls-files`.split("\n").reject { |f| ignored.match(f) }
38
39
  s.executables = `git ls-files -- bin/*`.split("\n")
39
- .map { |f| ::File.basename(f) }
40
+ .map { |f| File.basename(f) }
40
41
  s.require_paths = ["lib"]
41
42
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: stripe
3
3
  version: !ruby/object:Gem::Version
4
- version: 10.2.0.pre.beta.1
4
+ version: 10.3.0.pre.beta.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Stripe
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-11-02 00:00:00.000000000 Z
11
+ date: 2023-11-30 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: Stripe is the easiest way to accept payments online. See https://stripe.com
14
14
  for details.
@@ -74,6 +74,9 @@ files:
74
74
  - lib/stripe/resources/cash_balance.rb
75
75
  - lib/stripe/resources/charge.rb
76
76
  - lib/stripe/resources/checkout/session.rb
77
+ - lib/stripe/resources/climate/order.rb
78
+ - lib/stripe/resources/climate/product.rb
79
+ - lib/stripe/resources/climate/supplier.rb
77
80
  - lib/stripe/resources/confirmation_token.rb
78
81
  - lib/stripe/resources/country_spec.rb
79
82
  - lib/stripe/resources/coupon.rb
@@ -204,6 +207,7 @@ metadata:
204
207
  github_repo: ssh://github.com/stripe/stripe-ruby
205
208
  homepage_uri: https://stripe.com/docs/api?lang=ruby
206
209
  source_code_uri: https://github.com/stripe/stripe-ruby
210
+ rubygems_mfa_required: 'false'
207
211
  post_install_message:
208
212
  rdoc_options: []
209
213
  require_paths: