braintree 4.9.0 → 4.11.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (52) hide show
  1. checksums.yaml +4 -4
  2. data/lib/braintree/apple_pay_card.rb +2 -0
  3. data/lib/braintree/credit_card_verification_gateway.rb +18 -5
  4. data/lib/braintree/customer.rb +4 -1
  5. data/lib/braintree/dispute.rb +9 -0
  6. data/lib/braintree/dispute_search.rb +1 -0
  7. data/lib/braintree/error_codes.rb +7 -0
  8. data/lib/braintree/gateway.rb +4 -0
  9. data/lib/braintree/payment_instrument_type.rb +7 -6
  10. data/lib/braintree/payment_method_gateway.rb +2 -0
  11. data/lib/braintree/payment_method_nonce_details.rb +3 -0
  12. data/lib/braintree/payment_method_parser.rb +2 -0
  13. data/lib/braintree/sepa_direct_debit_account.rb +60 -0
  14. data/lib/braintree/sepa_direct_debit_account_gateway.rb +25 -0
  15. data/lib/braintree/sepa_direct_debit_account_nonce_details.rb +28 -0
  16. data/lib/braintree/test/nonce.rb +2 -0
  17. data/lib/braintree/transaction/credit_card_details.rb +4 -0
  18. data/lib/braintree/transaction/sepa_direct_debit_account_details.rb +27 -0
  19. data/lib/braintree/transaction.rb +6 -0
  20. data/lib/braintree/transaction_gateway.rb +1 -1
  21. data/lib/braintree/transaction_search.rb +1 -0
  22. data/lib/braintree/version.rb +1 -1
  23. data/lib/braintree/webhook_notification.rb +1 -0
  24. data/lib/braintree/webhook_testing_gateway.rb +76 -0
  25. data/lib/braintree.rb +4 -0
  26. data/spec/integration/braintree/credit_card_spec.rb +0 -60
  27. data/spec/integration/braintree/credit_card_verification_spec.rb +124 -1
  28. data/spec/integration/braintree/customer_spec.rb +1 -32
  29. data/spec/integration/braintree/dispute_search_spec.rb +28 -19
  30. data/spec/integration/braintree/dispute_spec.rb +27 -0
  31. data/spec/integration/braintree/http_spec.rb +1 -1
  32. data/spec/integration/braintree/paypal_account_spec.rb +2 -2
  33. data/spec/integration/braintree/sepa_direct_debit_account_spec.rb +196 -0
  34. data/spec/integration/braintree/subscription_spec.rb +1 -1
  35. data/spec/integration/braintree/transaction_search_spec.rb +34 -2
  36. data/spec/integration/braintree/transaction_spec.rb +107 -101
  37. data/spec/integration/spec_helper.rb +6 -0
  38. data/spec/unit/braintree/apple_pay_card_spec.rb +99 -11
  39. data/spec/unit/braintree/credit_card_verification_gateway_spec.rb +51 -0
  40. data/spec/unit/braintree/customer_spec.rb +11 -1
  41. data/spec/unit/braintree/dispute_search_spec.rb +1 -0
  42. data/spec/unit/braintree/dispute_spec.rb +8 -0
  43. data/spec/unit/braintree/payment_method_nonce_details_spec.rb +9 -1
  44. data/spec/unit/braintree/sepa_debit_account_nonce_details_spec.rb +29 -0
  45. data/spec/unit/braintree/sepa_debit_account_spec.rb +86 -0
  46. data/spec/unit/braintree/transaction/credit_card_details_spec.rb +16 -0
  47. data/spec/unit/braintree/transaction/deposit_details_spec.rb +1 -1
  48. data/spec/unit/braintree/transaction/sepa_direct_debit_account_details_spec.rb +33 -0
  49. data/spec/unit/braintree/transaction_gateway_spec.rb +111 -0
  50. data/spec/unit/braintree/transaction_spec.rb +72 -0
  51. data/spec/unit/braintree/webhook_notification_spec.rb +16 -0
  52. metadata +13 -3
@@ -0,0 +1,86 @@
1
+ require File.expand_path(File.dirname(__FILE__) + "/../spec_helper")
2
+
3
+ describe Braintree::SepaDirectDebitAccount do
4
+ describe "self.new" do
5
+ subject do
6
+ -> { described_class.new }
7
+ end
8
+
9
+ it "is protected" do
10
+ is_expected.to raise_error(NoMethodError, /protected method .new/)
11
+ end
12
+ end
13
+
14
+ describe "self._new" do
15
+ let(:params) do
16
+ {
17
+ bank_reference_token: "a-reference-token",
18
+ created_at: Time.now,
19
+ customer_global_id: "a-customer-global-id",
20
+ customer_id: "a-customer-id",
21
+ default: true,
22
+ global_id: "a-global-id",
23
+ image_url: "a-image-url",
24
+ last_4: "4321",
25
+ mandate_type: "ONE_OFF",
26
+ merchant_or_partner_customer_id: "a-mp-customer-id",
27
+ subscriptions: [{price: "10.00"}],
28
+ token: "a-token",
29
+ updated_at: Time.now,
30
+ view_mandate_url: "a-view-mandate-url",
31
+ }
32
+ end
33
+
34
+ subject do
35
+ described_class._new(:gateway, params)
36
+ end
37
+
38
+ it "initializes the object with the appropriate attributes set" do
39
+ is_expected.to have_attributes(**params)
40
+ end
41
+ end
42
+
43
+ describe "self.find" do
44
+ let(:token) { "token" }
45
+
46
+ subject do
47
+ described_class.find(token)
48
+ end
49
+
50
+ it "calls gateway find" do
51
+ expect_any_instance_of(Braintree::SepaDirectDebitAccountGateway).to receive(:find).with(token)
52
+ subject
53
+ end
54
+ end
55
+
56
+ describe "self.delete" do
57
+ let(:token) { "token" }
58
+
59
+ subject do
60
+ described_class.delete(token)
61
+ end
62
+
63
+ it "calls gateway delete" do
64
+ expect_any_instance_of(Braintree::SepaDirectDebitAccountGateway).to receive(:delete).with(token)
65
+ subject
66
+ end
67
+ end
68
+
69
+ describe "default?" do
70
+ subject do
71
+ described_class._new(:gateway, :default => default).default?
72
+ end
73
+
74
+ context "when sepa debit account is the default payment method for the customer" do
75
+ let(:default) { true }
76
+
77
+ it { is_expected.to be true }
78
+ end
79
+
80
+ context "when sepa debit account is not the default payment method for the customer" do
81
+ let(:default) { false }
82
+
83
+ it { is_expected.to be false }
84
+ end
85
+ end
86
+ end
@@ -46,4 +46,20 @@ describe Braintree::Transaction::CreditCardDetails do
46
46
  details.masked_number.should == "510510******5100"
47
47
  end
48
48
  end
49
+
50
+ describe "is_network_tokenized" do
51
+ it "returns true if is_network_tokenized is true" do
52
+ details = Braintree::Transaction::CreditCardDetails.new(
53
+ :is_network_tokenized => true,
54
+ )
55
+ details.is_network_tokenized?.should == true
56
+ end
57
+
58
+ it "returns false if is_network_tokenized is false" do
59
+ details = Braintree::Transaction::CreditCardDetails.new(
60
+ :is_network_tokenized => false,
61
+ )
62
+ details.is_network_tokenized?.should == false
63
+ end
64
+ end
49
65
  end
@@ -4,7 +4,7 @@ describe Braintree::Transaction::DisbursementDetails do
4
4
  describe "valid?" do
5
5
  it "returns true if disbursement details are initialized" do
6
6
  details = Braintree::Transaction::DisbursementDetails.new(
7
- :disbursement_date => Date.new(2013, 4, 1),
7
+ :disbursement_date => Date.new(2013, 4, 1).to_s,
8
8
  )
9
9
  details.valid?.should == true
10
10
  end
@@ -0,0 +1,33 @@
1
+ require File.expand_path(File.dirname(__FILE__) + "/../../spec_helper")
2
+
3
+ describe Braintree::Transaction::SepaDirectDebitAccountDetails do
4
+ describe "initialize" do
5
+ let(:params) do
6
+ {
7
+ bank_reference_token: "a-reference-token",
8
+ capture_id: "a-capture-id",
9
+ debug_id: "a-debug-id",
10
+ global_id: "a-global-id",
11
+ last_4: "1234",
12
+ mandate_type: "ONE_OFF",
13
+ merchant_or_partner_customer_id: "12312312343",
14
+ paypal_v2_order_id: "a-paypal-v2-order-id",
15
+ refund_from_transaction_fee_amount: "2.34",
16
+ refund_from_transaction_fee_currency_iso_code: "EUR",
17
+ refund_id: "a-refund-id",
18
+ settlement_type: "INSTANT",
19
+ token: "a-token",
20
+ transaction_fee_amount: "12.34",
21
+ transaction_fee_currency_iso_code: "EUR",
22
+ }
23
+ end
24
+
25
+ subject do
26
+ described_class.new(params)
27
+ end
28
+
29
+ it "sets all fields" do
30
+ is_expected.to have_attributes(**params)
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,111 @@
1
+ require File.expand_path(File.dirname(__FILE__) + "/../spec_helper")
2
+
3
+ describe Braintree::TransactionGateway do
4
+ describe "Transaction Gateway" do
5
+ let(:gateway) do
6
+ config = Braintree::Configuration.new(
7
+ :merchant_id => "merchant_id",
8
+ :public_key => "public_key",
9
+ :private_key => "private_key",
10
+ )
11
+ Braintree::Gateway.new(config)
12
+ end
13
+
14
+ it "creates a transactionGateway gateway" do
15
+ result = Braintree::TransactionGateway.new(gateway)
16
+
17
+ result.inspect.should include("merchant_id")
18
+ result.inspect.should include("public_key")
19
+ result.inspect.should include("private_key")
20
+ end
21
+
22
+ describe "self.create" do
23
+ it "raises an exception if attributes contain an invalid key" do
24
+ expect do
25
+ transaction = Braintree::TransactionGateway.new(gateway)
26
+ transaction.create(:invalid_key => "val")
27
+ end.to raise_error(ArgumentError, "invalid keys: invalid_key")
28
+ end
29
+ end
30
+
31
+ it "creates a transaction gateway signature" do
32
+ expect(Braintree::TransactionGateway._create_signature).to match([
33
+ :amount, :billing_address_id, :channel, :customer_id, :device_data, :discount_amount,
34
+ :merchant_account_id, :order_id, :payment_method_nonce, :payment_method_token,
35
+ :product_sku, :purchase_order_number, :service_fee_amount, :shared_billing_address_id,
36
+ :shared_customer_id, :shared_payment_method_nonce, :shared_payment_method_token,
37
+ :shared_shipping_address_id, :shipping_address_id, :shipping_amount,
38
+ :ships_from_postal_code, :tax_amount, :tax_exempt, :three_d_secure_authentication_id,
39
+ :three_d_secure_token, :transaction_source, :type, :venmo_sdk_payment_method_code,
40
+ :sca_exemption, :currency_iso_code, :exchange_rate_quote_id,
41
+ {:line_items => [:quantity, :name, :description, :kind, :unit_amount, :unit_tax_amount, :total_amount, :discount_amount, :tax_amount, :unit_of_measure, :product_code, :commodity_code, :url]},
42
+ {:risk_data => [:customer_browser, :customer_device_id, :customer_ip, :customer_location_zip, :customer_tenure]},
43
+ {:credit_card => [:token, :cardholder_name, :cvv, :expiration_date, :expiration_month, :expiration_year, :number, {:payment_reader_card_details => [:encrypted_card_data, :key_serial_number]}, {:network_tokenization_attributes => [:cryptogram, :ecommerce_indicator, :token_requestor_id]}]},
44
+ {:customer => [:id, :company, :email, :fax, :first_name, :last_name, :phone, :website]},
45
+ {
46
+ :billing => Braintree::AddressGateway._shared_signature
47
+ },
48
+ {
49
+ :shipping => Braintree::AddressGateway._shared_signature + [:shipping_method],
50
+ },
51
+ {
52
+ :three_d_secure_pass_thru => [
53
+ :eci_flag,
54
+ :cavv,
55
+ :xid,
56
+ :three_d_secure_version,
57
+ :authentication_response,
58
+ :directory_response,
59
+ :cavv_algorithm,
60
+ :ds_transaction_id,
61
+ ]
62
+ },
63
+ {:options => [
64
+ :hold_in_escrow,
65
+ :store_in_vault,
66
+ :store_in_vault_on_success,
67
+ :submit_for_settlement,
68
+ :add_billing_address_to_payment_method,
69
+ :store_shipping_address_in_vault,
70
+ :venmo_sdk_session,
71
+ :payee_id,
72
+ :payee_email,
73
+ :skip_advanced_fraud_checking,
74
+ :skip_avs,
75
+ :skip_cvv,
76
+ {:paypal => [:custom_field, :payee_id, :payee_email, :description, {:supplementary_data => :_any_key_}]},
77
+ {:three_d_secure => [:required]},
78
+ {:amex_rewards => [:request_id, :points, :currency_amount, :currency_iso_code]},
79
+ {:venmo => [:profile_id]},
80
+ {:credit_card => [:account_type]},
81
+ ]
82
+ },
83
+ {:external_vault => [
84
+ :status,
85
+ :previous_network_transaction_id,
86
+ ]},
87
+ {:custom_fields => :_any_key_},
88
+ {:descriptor => [:name, :phone, :url]},
89
+ {:paypal_account => [:email, :token, :paypal_data, :payee_id, :payee_email, :payer_id, :payment_id]},
90
+ {:industry => [
91
+ :industry_type,
92
+ {:data => [
93
+ :folio_number, :check_in_date, :check_out_date, :travel_package, :lodging_check_in_date, :lodging_check_out_date, :departure_date, :lodging_name, :room_rate, :room_tax,
94
+ :passenger_first_name, :passenger_last_name, :passenger_middle_initial, :passenger_title, :issued_date, :travel_agency_name, :travel_agency_code, :ticket_number,
95
+ :issuing_carrier_code, :customer_code, :fare_amount, :fee_amount, :tax_amount, :restricted_ticket, :no_show, :advanced_deposit, :fire_safe, :property_phone,
96
+ {:legs => [
97
+ :conjunction_ticket, :exchange_ticket, :coupon_number, :service_class, :carrier_code, :fare_basis_code, :flight_number, :departure_date, :departure_airport_code, :departure_time,
98
+ :arrival_airport_code, :arrival_time, :stopover_permitted, :fare_amount, :fee_amount, :tax_amount, :endorsement_or_restrictions,
99
+ ]},
100
+ {:additional_charges => [
101
+ :kind, :amount,
102
+ ]},
103
+ ]},
104
+ ]},
105
+ {:apple_pay_card => [:number, :cardholder_name, :cryptogram, :expiration_month, :expiration_year, :eci_indicator]},
106
+ {:google_pay_card => [:number, :cryptogram, :google_transaction_id, :expiration_month, :expiration_year, :source_card_type, :source_card_last_four, :eci_indicator]},
107
+ {:installments => [:count]},
108
+ ])
109
+ end
110
+ end
111
+ end
@@ -147,6 +147,48 @@ describe Braintree::Transaction do
147
147
  transaction.credit_card_details.issuing_bank.should == "Mr Tumnus"
148
148
  end
149
149
 
150
+ it "sets up network token attributes in network_token_details" do
151
+ transaction = Braintree::Transaction._new(
152
+ :gateway,
153
+ :network_token => {
154
+ :token => "mzg2",
155
+ :bin => "411111",
156
+ :last_4 => "1111",
157
+ :card_type => "Visa",
158
+ :expiration_month => "08",
159
+ :expiration_year => "2009",
160
+ :customer_location => "US",
161
+ :prepaid => "Yes",
162
+ :healthcare => "Yes",
163
+ :durbin_regulated => "Yes",
164
+ :debit => "Yes",
165
+ :commercial => "No",
166
+ :payroll => "Unknown",
167
+ :product_id => "Unknown",
168
+ :country_of_issuance => "Narnia",
169
+ :issuing_bank => "Mr Tumnus",
170
+ :is_network_tokenized => true
171
+ },
172
+ )
173
+ transaction.network_token_details.token.should == "mzg2"
174
+ transaction.network_token_details.bin.should == "411111"
175
+ transaction.network_token_details.last_4.should == "1111"
176
+ transaction.network_token_details.card_type.should == "Visa"
177
+ transaction.network_token_details.expiration_month.should == "08"
178
+ transaction.network_token_details.expiration_year.should == "2009"
179
+ transaction.network_token_details.customer_location.should == "US"
180
+ transaction.network_token_details.prepaid.should == Braintree::CreditCard::Prepaid::Yes
181
+ transaction.network_token_details.healthcare.should == Braintree::CreditCard::Healthcare::Yes
182
+ transaction.network_token_details.durbin_regulated.should == Braintree::CreditCard::DurbinRegulated::Yes
183
+ transaction.network_token_details.debit.should == Braintree::CreditCard::Debit::Yes
184
+ transaction.network_token_details.commercial.should == Braintree::CreditCard::Commercial::No
185
+ transaction.network_token_details.payroll.should == Braintree::CreditCard::Payroll::Unknown
186
+ transaction.network_token_details.product_id.should == Braintree::CreditCard::ProductId::Unknown
187
+ transaction.network_token_details.country_of_issuance.should == "Narnia"
188
+ transaction.network_token_details.issuing_bank.should == "Mr Tumnus"
189
+ transaction.network_token_details.is_network_tokenized?.should == true
190
+ end
191
+
150
192
  it "sets up three_d_secure_info" do
151
193
  transaction = Braintree::Transaction._new(
152
194
  :gateway,
@@ -255,6 +297,29 @@ describe Braintree::Transaction do
255
297
  expect(transaction.network_response_code).to eq("00")
256
298
  expect(transaction.network_response_text).to eq("Successful approval/completion or V.I.P. PIN verification is successful")
257
299
  end
300
+
301
+ it "accepts sepa_direct_debit_return_code" do
302
+ transaction = Braintree::Transaction._new(
303
+ :gateway,
304
+ :sepa_direct_debit_return_code => "AM04",
305
+ )
306
+ expect(transaction.sepa_direct_debit_return_code).to eq("AM04")
307
+ end
308
+
309
+ it "accepts sepa_direct_debit_account_details" do
310
+ transaction = Braintree::Transaction._new(
311
+ :gateway,
312
+ :id => "123",
313
+ :type => "sale",
314
+ :amount => "12.34",
315
+ :status => "settled",
316
+ :sepa_debit_account_detail => {
317
+ :token => "1234",
318
+ },
319
+ )
320
+ details = transaction.sepa_direct_debit_account_details
321
+ details.token.should == "1234"
322
+ end
258
323
  end
259
324
 
260
325
  describe "inspect" do
@@ -390,4 +455,11 @@ describe Braintree::Transaction do
390
455
  transaction.processed_with_network_token?.should == false
391
456
  end
392
457
  end
458
+
459
+ describe "gateway rejection reason" do
460
+ it "verifies excessive_retry mapping" do
461
+ transaction = Braintree::Transaction._new(:gateway, :gateway_rejection_reason => "excessive_retry")
462
+ transaction.gateway_rejection_reason.should == Braintree::Transaction::GatewayRejectionReason::ExcessiveRetry
463
+ end
464
+ end
393
465
  end
@@ -200,6 +200,22 @@ describe Braintree::WebhookNotification do
200
200
  dispute.kind.should == Braintree::Dispute::Kind::Chargeback
201
201
  end
202
202
 
203
+ it "builds a sample notification for a dispute auto_accepted webhook" do
204
+ sample_notification = Braintree::WebhookTesting.sample_notification(
205
+ Braintree::WebhookNotification::Kind::DisputeAutoAccepted,
206
+ dispute_id,
207
+ )
208
+
209
+ notification = Braintree::WebhookNotification.parse(sample_notification[:bt_signature], sample_notification[:bt_payload])
210
+
211
+ notification.kind.should == Braintree::WebhookNotification::Kind::DisputeAutoAccepted
212
+
213
+ dispute = notification.dispute
214
+ dispute.status.should == Braintree::Dispute::Status::AutoAccepted
215
+ dispute.id.should == dispute_id
216
+ dispute.kind.should == Braintree::Dispute::Kind::Chargeback
217
+ end
218
+
203
219
  it "builds a sample notification for a dispute disputed webhook" do
204
220
  sample_notification = Braintree::WebhookTesting.sample_notification(
205
221
  Braintree::WebhookNotification::Kind::DisputeDisputed,
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: braintree
3
3
  version: !ruby/object:Gem::Version
4
- version: 4.9.0
4
+ version: 4.11.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Braintree
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-10-03 00:00:00.000000000 Z
11
+ date: 2023-04-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: builder
@@ -146,6 +146,9 @@ files:
146
146
  - lib/braintree/risk_data.rb
147
147
  - lib/braintree/risk_data/liability_shift.rb
148
148
  - lib/braintree/samsung_pay_card.rb
149
+ - lib/braintree/sepa_direct_debit_account.rb
150
+ - lib/braintree/sepa_direct_debit_account_gateway.rb
151
+ - lib/braintree/sepa_direct_debit_account_nonce_details.rb
149
152
  - lib/braintree/settlement_batch_summary.rb
150
153
  - lib/braintree/settlement_batch_summary_gateway.rb
151
154
  - lib/braintree/sha256_digest.rb
@@ -177,6 +180,7 @@ files:
177
180
  - lib/braintree/transaction/paypal_details.rb
178
181
  - lib/braintree/transaction/paypal_here_details.rb
179
182
  - lib/braintree/transaction/samsung_pay_card_details.rb
183
+ - lib/braintree/transaction/sepa_direct_debit_account_details.rb
180
184
  - lib/braintree/transaction/status_details.rb
181
185
  - lib/braintree/transaction/subscription_details.rb
182
186
  - lib/braintree/transaction/us_bank_account_details.rb
@@ -245,6 +249,7 @@ files:
245
249
  - spec/integration/braintree/paypal_account_spec.rb
246
250
  - spec/integration/braintree/plan_spec.rb
247
251
  - spec/integration/braintree/samsung_pay_card_spec.rb
252
+ - spec/integration/braintree/sepa_direct_debit_account_spec.rb
248
253
  - spec/integration/braintree/settlement_batch_summary_spec.rb
249
254
  - spec/integration/braintree/subscription_spec.rb
250
255
  - spec/integration/braintree/test/transaction_amounts_spec.rb
@@ -272,6 +277,7 @@ files:
272
277
  - spec/unit/braintree/configuration_spec.rb
273
278
  - spec/unit/braintree/credentials_parser_spec.rb
274
279
  - spec/unit/braintree/credit_card_spec.rb
280
+ - spec/unit/braintree/credit_card_verification_gateway_spec.rb
275
281
  - spec/unit/braintree/credit_card_verification_search_spec.rb
276
282
  - spec/unit/braintree/credit_card_verification_spec.rb
277
283
  - spec/unit/braintree/customer_spec.rb
@@ -303,6 +309,8 @@ files:
303
309
  - spec/unit/braintree/resource_collection_spec.rb
304
310
  - spec/unit/braintree/risk_data/liability_shift.rb
305
311
  - spec/unit/braintree/risk_data_spec.rb
312
+ - spec/unit/braintree/sepa_debit_account_nonce_details_spec.rb
313
+ - spec/unit/braintree/sepa_debit_account_spec.rb
306
314
  - spec/unit/braintree/sha256_digest_spec.rb
307
315
  - spec/unit/braintree/signature_service_spec.rb
308
316
  - spec/unit/braintree/subscription_search_spec.rb
@@ -314,6 +322,8 @@ files:
314
322
  - spec/unit/braintree/transaction/deposit_details_spec.rb
315
323
  - spec/unit/braintree/transaction/installment_spec.rb
316
324
  - spec/unit/braintree/transaction/paypal_details_spec.rb
325
+ - spec/unit/braintree/transaction/sepa_direct_debit_account_details_spec.rb
326
+ - spec/unit/braintree/transaction_gateway_spec.rb
317
327
  - spec/unit/braintree/transaction_search_spec.rb
318
328
  - spec/unit/braintree/transaction_spec.rb
319
329
  - spec/unit/braintree/unknown_payment_method_spec.rb
@@ -354,7 +364,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
354
364
  - !ruby/object:Gem::Version
355
365
  version: '0'
356
366
  requirements: []
357
- rubygems_version: 3.3.22
367
+ rubygems_version: 3.4.10
358
368
  signing_key:
359
369
  specification_version: 4
360
370
  summary: Braintree Ruby Server SDK