braintree 2.104.1 → 3.0.1

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 (80) hide show
  1. checksums.yaml +4 -4
  2. data/LICENSE +1 -1
  3. data/braintree.gemspec +6 -3
  4. data/lib/braintree.rb +3 -17
  5. data/lib/braintree/address.rb +0 -22
  6. data/lib/braintree/base_module.rb +6 -0
  7. data/lib/braintree/configuration.rb +1 -1
  8. data/lib/braintree/credit_card.rb +0 -75
  9. data/lib/braintree/credit_card_gateway.rb +3 -32
  10. data/lib/braintree/credit_card_verification.rb +13 -0
  11. data/lib/braintree/customer.rb +3 -74
  12. data/lib/braintree/customer_gateway.rb +0 -23
  13. data/lib/braintree/dispute.rb +1 -7
  14. data/lib/braintree/dispute/{history_event.rb → status_history.rb} +3 -1
  15. data/lib/braintree/dispute_gateway.rb +2 -7
  16. data/lib/braintree/error_codes.rb +139 -170
  17. data/lib/braintree/exceptions.rb +5 -3
  18. data/lib/braintree/gateway.rb +0 -14
  19. data/lib/braintree/{android_pay_card.rb → google_pay_card.rb} +1 -2
  20. data/lib/braintree/merchant_account_gateway.rb +2 -0
  21. data/lib/braintree/payment_instrument_type.rb +1 -5
  22. data/lib/braintree/payment_method_gateway.rb +4 -9
  23. data/lib/braintree/payment_method_parser.rb +1 -8
  24. data/lib/braintree/subscription.rb +5 -5
  25. data/lib/braintree/successful_result.rb +0 -1
  26. data/lib/braintree/test/nonce.rb +4 -23
  27. data/lib/braintree/transaction.rb +2 -79
  28. data/lib/braintree/transaction/disbursement_details.rb +1 -0
  29. data/lib/braintree/transaction/{android_pay_details.rb → google_pay_details.rb} +1 -1
  30. data/lib/braintree/transaction/subscription_details.rb +2 -0
  31. data/lib/braintree/transaction_gateway.rb +12 -21
  32. data/lib/braintree/transaction_search.rb +0 -1
  33. data/lib/braintree/util.rb +17 -2
  34. data/lib/braintree/version.rb +2 -2
  35. data/lib/braintree/webhook_notification.rb +0 -10
  36. data/lib/braintree/webhook_testing_gateway.rb +0 -43
  37. data/lib/braintree/xml/libxml.rb +1 -0
  38. data/lib/braintree/xml/parser.rb +11 -34
  39. data/spec/integration/braintree/address_spec.rb +2 -89
  40. data/spec/integration/braintree/client_api/spec_helper.rb +0 -26
  41. data/spec/integration/braintree/credit_card_spec.rb +6 -471
  42. data/spec/integration/braintree/customer_spec.rb +22 -362
  43. data/spec/integration/braintree/dispute_search_spec.rb +2 -2
  44. data/spec/integration/braintree/dispute_spec.rb +1 -2
  45. data/spec/integration/braintree/payment_method_spec.rb +77 -120
  46. data/spec/integration/braintree/subscription_spec.rb +11 -16
  47. data/spec/integration/braintree/transaction_search_spec.rb +3 -3
  48. data/spec/integration/braintree/transaction_spec.rb +83 -511
  49. data/spec/integration/spec_helper.rb +1 -4
  50. data/spec/spec_helper.rb +1 -11
  51. data/spec/unit/braintree/address_spec.rb +0 -8
  52. data/spec/unit/braintree/credit_card_spec.rb +1 -20
  53. data/spec/unit/braintree/customer_spec.rb +0 -12
  54. data/spec/unit/braintree/dispute_spec.rb +1 -12
  55. data/spec/unit/braintree/http_spec.rb +3 -3
  56. data/spec/unit/braintree/transaction_spec.rb +1 -35
  57. data/spec/unit/braintree/util_spec.rb +37 -3
  58. data/spec/unit/braintree/webhook_notification_spec.rb +1 -1
  59. data/spec/unit/braintree/xml/parser_spec.rb +21 -16
  60. metadata +26 -30
  61. data/lib/braintree/amex_express_checkout_card.rb +0 -40
  62. data/lib/braintree/coinbase_account.rb +0 -34
  63. data/lib/braintree/europe_bank_account.rb +0 -36
  64. data/lib/braintree/europe_bank_account_gateway.rb +0 -17
  65. data/lib/braintree/ideal_payment.rb +0 -61
  66. data/lib/braintree/ideal_payment_gateway.rb +0 -19
  67. data/lib/braintree/masterpass_card.rb +0 -83
  68. data/lib/braintree/transaction/amex_express_checkout_details.rb +0 -21
  69. data/lib/braintree/transaction/coinbase_details.rb +0 -16
  70. data/lib/braintree/transaction/ideal_payment_details.rb +0 -19
  71. data/lib/braintree/transaction/masterpass_card_details.rb +0 -49
  72. data/lib/braintree/transparent_redirect.rb +0 -40
  73. data/lib/braintree/transparent_redirect_gateway.rb +0 -105
  74. data/lib/braintree/xml/rexml.rb +0 -71
  75. data/spec/hacks/tcp_socket.rb +0 -18
  76. data/spec/integration/braintree/coinbase_spec.rb +0 -34
  77. data/spec/integration/braintree/masterpass_card_spec.rb +0 -97
  78. data/spec/integration/braintree/transparent_redirect_spec.rb +0 -268
  79. data/spec/unit/braintree/transparent_redirect_spec.rb +0 -223
  80. data/spec/unit/braintree/xml/rexml_spec.rb +0 -51
@@ -5,7 +5,6 @@ unless defined?(INTEGRATION_SPEC_HELPER_LOADED)
5
5
  SSL_TEST_PORT = ENV['SSL_TEST_PORT'] || 8444
6
6
 
7
7
  require File.dirname(__FILE__) + "/../spec_helper"
8
- require File.dirname(__FILE__) + "/../hacks/tcp_socket"
9
8
 
10
9
  def start_ssl_server
11
10
  web_server_pid_file = File.expand_path(File.join(File.dirname(__FILE__), "..", "httpsd.pid"))
@@ -13,9 +12,7 @@ unless defined?(INTEGRATION_SPEC_HELPER_LOADED)
13
12
  FileUtils.rm(web_server_pid_file) if File.exist?(web_server_pid_file)
14
13
  command = File.expand_path(File.join(File.dirname(__FILE__), "..", "script", "httpsd.rb"))
15
14
  `#{command} #{web_server_pid_file}`
16
- TCPSocket.wait_for_service :host => "127.0.0.1", :port => SSL_TEST_PORT
17
-
18
- yield
15
+ TCPSocket.new("127.0.0.1",SSL_TEST_PORT)
19
16
 
20
17
  10.times { unless File.exists?(web_server_pid_file); sleep 1; end }
21
18
  ensure
@@ -4,7 +4,6 @@ unless defined?(SPEC_HELPER_LOADED)
4
4
  require "rubygems"
5
5
  require "bundler/setup"
6
6
  require "rspec"
7
- require "libxml"
8
7
  require "pry"
9
8
 
10
9
  braintree_lib = "#{project_root}/lib"
@@ -28,10 +27,6 @@ unless defined?(SPEC_HELPER_LOADED)
28
27
  end
29
28
  end
30
29
 
31
- def now_in_eastern
32
- (Time.now.utc - 5*60*60).strftime("%Y-%m-%d")
33
- end
34
-
35
30
  module SpecHelper
36
31
 
37
32
  DefaultMerchantAccountId = "sandbox_credit_card"
@@ -188,16 +183,11 @@ unless defined?(SPEC_HELPER_LOADED)
188
183
  end
189
184
 
190
185
  def matches?(xml_string)
191
- @libxml_parse = Braintree::Xml::Parser.hash_from_xml(xml_string, Braintree::Xml::Libxml)
192
- @rexml_parse = Braintree::Xml::Parser.hash_from_xml(xml_string, Braintree::Xml::Rexml)
186
+ @libxml_parse = Braintree::Xml::Parser.hash_from_xml(xml_string)
193
187
  if @libxml_parse != @expected_hash
194
188
  @results = @libxml_parse
195
189
  @failed_parser = "libxml"
196
190
  false
197
- elsif @rexml_parse != @expected_hash
198
- @results = @rexml_parse
199
- @failed_parser = "rexml"
200
- false
201
191
  else
202
192
  true
203
193
  end
@@ -94,12 +94,4 @@ describe Braintree::Address do
94
94
  end.to raise_error(NoMethodError, /protected method .new/)
95
95
  end
96
96
  end
97
-
98
- describe "update" do
99
- it "raises an exception if hash includes an invalid key" do
100
- expect do
101
- Braintree::Address._new(Braintree::Configuration.gateway, {}).update(:street_address => "456 E Main", :invalid_key2 => "foo")
102
- end.to raise_error(ArgumentError, "invalid keys: invalid_key2")
103
- end
104
- end
105
97
  end
@@ -15,7 +15,6 @@ describe Braintree::CreditCard do
15
15
  :billing_address_id,
16
16
  :cardholder_name,
17
17
  :cvv,
18
- :device_session_id,
19
18
  :expiration_date,
20
19
  :expiration_month,
21
20
  :expiration_year,
@@ -23,7 +22,6 @@ describe Braintree::CreditCard do
23
22
  :token,
24
23
  :venmo_sdk_payment_method_code,
25
24
  :device_data,
26
- :fraud_merchant_id,
27
25
  :payment_method_nonce,
28
26
  {:external_vault=>[:network_transaction_id]},
29
27
  {:options => [:make_default, :verification_merchant_account_id, :verify_card, :verification_amount, :venmo_sdk_session, :fail_on_duplicate_payment_method, :verification_account_type]},
@@ -63,7 +61,6 @@ describe Braintree::CreditCard do
63
61
  :billing_address_id,
64
62
  :cardholder_name,
65
63
  :cvv,
66
- :device_session_id,
67
64
  :expiration_date,
68
65
  :expiration_month,
69
66
  :expiration_year,
@@ -71,7 +68,6 @@ describe Braintree::CreditCard do
71
68
  :token,
72
69
  :venmo_sdk_payment_method_code,
73
70
  :device_data,
74
- :fraud_merchant_id,
75
71
  :payment_method_nonce,
76
72
  {:external_vault=>[:network_transaction_id]},
77
73
  {:options => [:make_default, :verification_merchant_account_id, :verify_card, :verification_amount, :venmo_sdk_session, :fail_on_duplicate_payment_method, :verification_account_type]},
@@ -105,21 +101,6 @@ describe Braintree::CreditCard do
105
101
  end
106
102
  end
107
103
 
108
- describe "self.create_from_transparent_redirect" do
109
- it "raises an exception if the query string is forged" do
110
- expect do
111
- Braintree::CreditCard.create_from_transparent_redirect("http_status=200&forged=query_string")
112
- end.to raise_error(Braintree::ForgedQueryString)
113
- end
114
- end
115
-
116
- describe "self.create_credit_card_url" do
117
- it "returns the url" do
118
- config = Braintree::Configuration.instantiate
119
- Braintree::CreditCard.create_credit_card_url.should == "http#{config.ssl? ? 's' : ''}://#{config.server}:#{config.port}/merchants/integration_merchant_id/payment_methods/all/create_via_transparent_redirect_request"
120
- end
121
- end
122
-
123
104
  describe "==" do
124
105
  it "returns true if given a credit card with the same token" do
125
106
  first = Braintree::CreditCard._new(:gateway, :token => 123)
@@ -253,7 +234,7 @@ describe Braintree::CreditCard do
253
234
  describe "self.update" do
254
235
  it "raises an exception if attributes contain an invalid key" do
255
236
  expect do
256
- Braintree::CreditCard._new(Braintree::Configuration.gateway, {}).update(:invalid_key => 'val')
237
+ Braintree::CreditCard.update(:gateway, :invalid_key => 'val')
257
238
  end.to raise_error(ArgumentError, "invalid keys: invalid_key")
258
239
  end
259
240
  end
@@ -91,7 +91,6 @@ describe Braintree::Customer do
91
91
  :billing_address_id,
92
92
  :cardholder_name,
93
93
  :cvv,
94
- :device_session_id,
95
94
  :expiration_date,
96
95
  :expiration_month,
97
96
  :expiration_year,
@@ -99,7 +98,6 @@ describe Braintree::Customer do
99
98
  :token,
100
99
  :venmo_sdk_payment_method_code,
101
100
  :device_data,
102
- :fraud_merchant_id,
103
101
  :payment_method_nonce,
104
102
  {:external_vault=>[:network_transaction_id]},
105
103
  {:options => [:make_default, :verification_merchant_account_id, :verify_card, :verification_amount, :venmo_sdk_session, :fail_on_duplicate_payment_method, :verification_account_type]},
@@ -182,7 +180,6 @@ describe Braintree::Customer do
182
180
  :billing_address_id,
183
181
  :cardholder_name,
184
182
  :cvv,
185
- :device_session_id,
186
183
  :expiration_date,
187
184
  :expiration_month,
188
185
  :expiration_year,
@@ -190,7 +187,6 @@ describe Braintree::Customer do
190
187
  :token,
191
188
  :venmo_sdk_payment_method_code,
192
189
  :device_data,
193
- :fraud_merchant_id,
194
190
  :payment_method_nonce,
195
191
  {:external_vault=>[:network_transaction_id]},
196
192
  {:options => [
@@ -259,14 +255,6 @@ describe Braintree::Customer do
259
255
  end
260
256
  end
261
257
 
262
- describe "self.create_from_transparent_redirect" do
263
- it "raises an exception if the query string is forged" do
264
- expect do
265
- Braintree::Customer.create_from_transparent_redirect("http_status=200&forged=query_string")
266
- end.to raise_error(Braintree::ForgedQueryString)
267
- end
268
- end
269
-
270
258
  describe "==" do
271
259
  it "returns true when given a customer with the same id" do
272
260
  first = Braintree::Customer._new(:gateway, :id => 123)
@@ -198,13 +198,6 @@ describe Braintree::Dispute do
198
198
 
199
199
  describe "with optional params" do
200
200
  it "does not raise an exception if the optional parameters are valid" do
201
- Braintree::Http.stub(:new).and_return double.as_null_object
202
- expect do
203
- Braintree::Dispute.add_text_evidence("dispute_id", { content: "a", tag: "", sequence_number: 3 })
204
- end.to_not raise_error
205
- end
206
-
207
- it "does not raise an exception if the category parameter is provided" do
208
201
  Braintree::Http.stub(:new).and_return double.as_null_object
209
202
  expect do
210
203
  Braintree::Dispute.add_text_evidence("dispute_id", { content: "a", category: "", sequence_number: 3 })
@@ -327,7 +320,7 @@ describe Braintree::Dispute do
327
320
  dispute.transaction.payment_instrument_subtype.should == "Visa"
328
321
  end
329
322
 
330
- it "converts status_history hash into an array of Dispute::HistoryEvent objects" do
323
+ it "converts status_history hash into an array of Dispute::StatusHistory objects" do
331
324
  dispute = Braintree::Dispute._new(attributes)
332
325
 
333
326
  dispute.status_history.length.should == 1
@@ -398,10 +391,6 @@ describe Braintree::Dispute do
398
391
  describe "comments" do
399
392
  let(:dispute) { Braintree::Dispute._new(attributes) }
400
393
 
401
- it "#forwarded_comments returns `processor_comments`" do
402
- expect(dispute.forwarded_comments).to eq(dispute.processor_comments)
403
- end
404
-
405
394
  it "#processor_comments" do
406
395
  expect(dispute.processor_comments).to eq(attributes[:processor_comments])
407
396
  end
@@ -130,7 +130,7 @@ END
130
130
  expect(default_headers["Accept-Encoding"]).to eq("gzip")
131
131
  expect(default_headers["Content-Type"]).to eq("application/xml")
132
132
  expect(default_headers["User-Agent"]).to match(/Braintree Ruby Gem .*/)
133
- expect(default_headers["X-ApiVersion"]).to eq("5")
133
+ expect(default_headers["X-ApiVersion"]).to eq("6")
134
134
  end
135
135
 
136
136
  it "overwrites defaults with override headers" do
@@ -144,7 +144,7 @@ END
144
144
  expect(headers["Authorization"]).to eq("token")
145
145
  expect(headers["Content-Type"]).to eq("application/xml")
146
146
  expect(headers["User-Agent"]).to match(/Braintree Ruby Gem .*/)
147
- expect(headers["X-ApiVersion"]).to eq("5")
147
+ expect(headers["X-ApiVersion"]).to eq("6")
148
148
  end
149
149
 
150
150
  it "extends default headers when new headers are specified" do
@@ -156,7 +156,7 @@ END
156
156
  expect(headers["Accept-Encoding"]).to eq("gzip")
157
157
  expect(headers["Content-Type"]).to eq("application/xml")
158
158
  expect(headers["User-Agent"]).to match(/Braintree Ruby Gem .*/)
159
- expect(headers["X-ApiVersion"]).to eq("5")
159
+ expect(headers["X-ApiVersion"]).to eq("6")
160
160
  expect(headers["New-Header"]).to eq("New Value")
161
161
  end
162
162
  end
@@ -17,14 +17,6 @@ describe Braintree::Transaction do
17
17
  end
18
18
  end
19
19
 
20
- describe "self.create_from_transparent_redirect" do
21
- it "raises an exception if the query string is forged" do
22
- expect do
23
- Braintree::Transaction.create_from_transparent_redirect("http_status=200&forged=query_string")
24
- end.to raise_error(Braintree::ForgedQueryString)
25
- end
26
- end
27
-
28
20
  describe "self.find" do
29
21
  it "raises error if passed empty string" do
30
22
  expect do
@@ -45,13 +37,6 @@ describe Braintree::Transaction do
45
37
  end
46
38
  end
47
39
 
48
- describe "self.create_transaction_url" do
49
- it "returns the url" do
50
- config = Braintree::Configuration.instantiate
51
- Braintree::Transaction.create_transaction_url.should == "http#{config.ssl? ? 's' : ''}://#{config.server}:#{config.port}/merchants/integration_merchant_id/transactions/all/create_via_transparent_redirect_request"
52
- end
53
- end
54
-
55
40
  describe "self.submit_for_settlement" do
56
41
  it "raises an ArgumentError if transaction_id is an invalid format" do
57
42
  expect do
@@ -106,7 +91,7 @@ describe Braintree::Transaction do
106
91
  }
107
92
  )
108
93
  disbursement = transaction.disbursement_details
109
- disbursement.disbursement_date.should == "2013-04-03"
94
+ disbursement.disbursement_date.should == Date.parse("2013-04-03")
110
95
  disbursement.settlement_amount.should == "120.00"
111
96
  disbursement.settlement_currency_iso_code.should == "USD"
112
97
  disbursement.settlement_currency_exchange_rate.should == "1"
@@ -171,25 +156,6 @@ describe Braintree::Transaction do
171
156
  transaction.three_d_secure_info.liability_shift_possible.should == true
172
157
  end
173
158
 
174
- it "sets up ideal_payment_details" do
175
- transaction = Braintree::Transaction._new(
176
- :gateway,
177
- :ideal_payment => {
178
- :ideal_payment_id => "idealpayment_abc_123",
179
- :ideal_transaction_id => "1150000008857321",
180
- :masked_iban => "12************7890",
181
- :bic => "RABONL2U",
182
- :image_url => "http://www.example.com/ideal.png"
183
- }
184
- )
185
-
186
- transaction.ideal_payment_details.ideal_payment_id.should == "idealpayment_abc_123"
187
- transaction.ideal_payment_details.ideal_transaction_id.should == "1150000008857321"
188
- transaction.ideal_payment_details.masked_iban.should == "12************7890"
189
- transaction.ideal_payment_details.bic.should == "RABONL2U"
190
- transaction.ideal_payment_details.image_url.should == "http://www.example.com/ideal.png"
191
- end
192
-
193
159
  it "sets up history attributes in status_history" do
194
160
  time = Time.utc(2010,1,14)
195
161
  transaction = Braintree::Transaction._new(
@@ -171,6 +171,22 @@ describe Braintree::Util do
171
171
  end
172
172
  end
173
173
 
174
+ describe "self.replace_key" do
175
+ it "replaces the target key with the replacement key" do
176
+ Braintree::Util.replace_key(
177
+ {:a => {:b => "some value"}},
178
+ :b,
179
+ :c).should == {:a => {:c => "some value"}}
180
+ end
181
+
182
+ it "returns hash with all of the original keys if the target key does not exist" do
183
+ Braintree::Util.replace_key(
184
+ {:some_key => "some value"},
185
+ :not_found,
186
+ :new_key).should == {:some_key => "some value"}
187
+ end
188
+ end
189
+
174
190
  describe "self._flatten_hash_keys" do
175
191
  it "flattens hash keys" do
176
192
  Braintree::Util._flatten_hash_keys(:nested => {
@@ -259,7 +275,7 @@ describe Braintree::Util do
259
275
  "UNSUPPORTED_CLIENT" => Braintree::UpgradeRequiredError,
260
276
  "RESOURCE_LIMIT" => Braintree::TooManyRequestsError,
261
277
  "INTERNAL" => Braintree::ServerError,
262
- "SERVICE_AVAILABILITY" => Braintree::DownForMaintenanceError,
278
+ "SERVICE_AVAILABILITY" => Braintree::ServiceUnavailableError,
263
279
  }
264
280
 
265
281
  errors.each do |graphQLError, exception|
@@ -321,6 +337,18 @@ describe Braintree::Util do
321
337
  end.to raise_error(Braintree::AuthorizationError)
322
338
  end
323
339
 
340
+ it "raises a NotFoundError if resource is not found" do
341
+ expect do
342
+ Braintree::Util.raise_exception_for_status_code(404)
343
+ end.to raise_error(Braintree::NotFoundError)
344
+ end
345
+
346
+ it "raises a RequestTimeoutError if the request times out" do
347
+ expect do
348
+ Braintree::Util.raise_exception_for_status_code(408)
349
+ end.to raise_error(Braintree::RequestTimeoutError)
350
+ end
351
+
324
352
  it "raises an UpgradeRequired if the client library is EOL'd" do
325
353
  expect do
326
354
  Braintree::Util.raise_exception_for_status_code(426)
@@ -339,10 +367,16 @@ describe Braintree::Util do
339
367
  end.to raise_error(Braintree::ServerError)
340
368
  end
341
369
 
342
- it "raises a DownForMaintenanceError if the server is down for maintenance" do
370
+ it "raises a ServiceUnavailableError if the server is unavailable" do
343
371
  expect do
344
372
  Braintree::Util.raise_exception_for_status_code(503)
345
- end.to raise_error(Braintree::DownForMaintenanceError)
373
+ end.to raise_error(Braintree::ServiceUnavailableError)
374
+ end
375
+
376
+ it "raises a GatewayTimeoutError if the gateway times out" do
377
+ expect do
378
+ Braintree::Util.raise_exception_for_status_code(504)
379
+ end.to raise_error(Braintree::GatewayTimeoutError)
346
380
  end
347
381
 
348
382
  it "raises an UnexpectedError if some other code is returned" do
@@ -275,7 +275,7 @@ describe Braintree::WebhookNotification do
275
275
  notification.kind.should == Braintree::WebhookNotification::Kind::TransactionDisbursed
276
276
  notification.transaction.id.should == "my_id"
277
277
  notification.transaction.amount.should == 1_00
278
- notification.transaction.disbursement_details.disbursement_date.should == "2013-07-09"
278
+ notification.transaction.disbursement_details.disbursement_date.should == Date.parse("2013-07-09")
279
279
  end
280
280
 
281
281
  it "builds a sample notification for a disbursement_exception webhook" do
@@ -57,24 +57,29 @@ describe Braintree::Xml::Parser do
57
57
  xml.should parse_to(:root => {:customers => [{:name => "Adam"}, {:name => "Ben"}]})
58
58
  end
59
59
 
60
- it "parses using libxml when not using ruby 2.0" do
61
- xml = "<root><foo type=\"integer\">123</foo></root>"
62
- stub_const("RUBY_VERSION", "2.1.1")
63
- ::Braintree::Xml::Libxml.should_receive(:parse).and_call_original
64
-
65
- Braintree::Xml::Parser.hash_from_xml(xml)
60
+ it "parses an array" do
61
+ xml = <<-END
62
+ <root>
63
+ <customers type="array">
64
+ <customer><name>Adam</name><customer-id>1</customer-id></customer>
65
+ <customer><name>Ben</name><customer-id>2</customer-id></customer>
66
+ </customers>
67
+ </root>
68
+ END
69
+ xml.should parse_to(:root => {:customers => [{:name => "Adam", :customer_id => "1"}, {:name => "Ben", :customer_id => "2"}]})
66
70
  end
67
71
 
68
- it "parses using rexml when using ruby 2.0 to avoid Libxml segfault" do
69
- segfault_prone_library_in_ruby_2_0 = ::Braintree::Xml::Libxml
70
-
71
- xml = "<root><foo type=\"integer\">123</foo></root>"
72
- stub_const("RUBY_VERSION", "2.0.0")
73
-
74
- ::Braintree::Xml::Rexml.should_receive(:parse).and_call_original
75
- segfault_prone_library_in_ruby_2_0.should_not_receive(:parse)
76
-
77
- Braintree::Xml::Parser.hash_from_xml(xml)
72
+ it "parses nested objects" do
73
+ xml = <<-END
74
+ <root>
75
+ <paypal-details>
76
+ <deets type="array"><super-secrets><secret-code>1234</secret-code></super-secrets></deets>
77
+ <payer-email>abc@test.com</payer-email>
78
+ <payment-id>1234567890</payment-id>
79
+ </paypal-details>
80
+ </root>
81
+ END
82
+ xml.should parse_to(:root => {:paypal_details => {:deets => [{:secret_code => "1234"}], :payer_email => "abc@test.com", :payment_id => "1234567890"}})
78
83
  end
79
84
  end
80
85
  end
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: 2.104.1
4
+ version: 3.0.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Braintree
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-10-12 00:00:00.000000000 Z
11
+ date: 2020-10-19 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: builder
@@ -16,15 +16,30 @@ dependencies:
16
16
  requirements:
17
17
  - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: 2.0.0
19
+ version: 3.2.4
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - ">="
25
25
  - !ruby/object:Gem::Version
26
- version: 2.0.0
27
- description: Ruby library for integrating with the Braintree Gateway
26
+ version: 3.2.4
27
+ - !ruby/object:Gem::Dependency
28
+ name: libxml-ruby
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: 3.2.0
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: 3.2.0
41
+ description: Resources and tools for developers to integrate Braintree's global payments
42
+ platform.
28
43
  email: code@getbraintree.com
29
44
  executables: []
30
45
  extensions: []
@@ -41,8 +56,6 @@ files:
41
56
  - lib/braintree/address/country_names.rb
42
57
  - lib/braintree/address_gateway.rb
43
58
  - lib/braintree/advanced_search.rb
44
- - lib/braintree/amex_express_checkout_card.rb
45
- - lib/braintree/android_pay_card.rb
46
59
  - lib/braintree/apple_pay.rb
47
60
  - lib/braintree/apple_pay_card.rb
48
61
  - lib/braintree/apple_pay_gateway.rb
@@ -52,7 +65,6 @@ files:
52
65
  - lib/braintree/bin_data.rb
53
66
  - lib/braintree/client_token.rb
54
67
  - lib/braintree/client_token_gateway.rb
55
- - lib/braintree/coinbase_account.rb
56
68
  - lib/braintree/configuration.rb
57
69
  - lib/braintree/connected_merchant_paypal_status_changed.rb
58
70
  - lib/braintree/connected_merchant_status_transitioned.rb
@@ -72,7 +84,7 @@ files:
72
84
  - lib/braintree/discount_gateway.rb
73
85
  - lib/braintree/dispute.rb
74
86
  - lib/braintree/dispute/evidence.rb
75
- - lib/braintree/dispute/history_event.rb
87
+ - lib/braintree/dispute/status_history.rb
76
88
  - lib/braintree/dispute/transaction.rb
77
89
  - lib/braintree/dispute/transaction_details.rb
78
90
  - lib/braintree/dispute_gateway.rb
@@ -82,19 +94,15 @@ files:
82
94
  - lib/braintree/error_codes.rb
83
95
  - lib/braintree/error_result.rb
84
96
  - lib/braintree/errors.rb
85
- - lib/braintree/europe_bank_account.rb
86
- - lib/braintree/europe_bank_account_gateway.rb
87
97
  - lib/braintree/exceptions.rb
88
98
  - lib/braintree/facilitated_details.rb
89
99
  - lib/braintree/facilitator_details.rb
90
100
  - lib/braintree/gateway.rb
101
+ - lib/braintree/google_pay_card.rb
91
102
  - lib/braintree/granted_payment_instrument_update.rb
92
103
  - lib/braintree/graphql_client.rb
93
104
  - lib/braintree/http.rb
94
- - lib/braintree/ideal_payment.rb
95
- - lib/braintree/ideal_payment_gateway.rb
96
105
  - lib/braintree/local_payment_completed.rb
97
- - lib/braintree/masterpass_card.rb
98
106
  - lib/braintree/merchant.rb
99
107
  - lib/braintree/merchant_account.rb
100
108
  - lib/braintree/merchant_account/address_details.rb
@@ -144,16 +152,12 @@ files:
144
152
  - lib/braintree/three_d_secure_info.rb
145
153
  - lib/braintree/transaction.rb
146
154
  - lib/braintree/transaction/address_details.rb
147
- - lib/braintree/transaction/amex_express_checkout_details.rb
148
- - lib/braintree/transaction/android_pay_details.rb
149
155
  - lib/braintree/transaction/apple_pay_details.rb
150
- - lib/braintree/transaction/coinbase_details.rb
151
156
  - lib/braintree/transaction/credit_card_details.rb
152
157
  - lib/braintree/transaction/customer_details.rb
153
158
  - lib/braintree/transaction/disbursement_details.rb
154
- - lib/braintree/transaction/ideal_payment_details.rb
159
+ - lib/braintree/transaction/google_pay_details.rb
155
160
  - lib/braintree/transaction/local_payment_details.rb
156
- - lib/braintree/transaction/masterpass_card_details.rb
157
161
  - lib/braintree/transaction/paypal_details.rb
158
162
  - lib/braintree/transaction/paypal_here_details.rb
159
163
  - lib/braintree/transaction/samsung_pay_card_details.rb
@@ -166,8 +170,6 @@ files:
166
170
  - lib/braintree/transaction_line_item.rb
167
171
  - lib/braintree/transaction_line_item_gateway.rb
168
172
  - lib/braintree/transaction_search.rb
169
- - lib/braintree/transparent_redirect.rb
170
- - lib/braintree/transparent_redirect_gateway.rb
171
173
  - lib/braintree/unknown_payment_method.rb
172
174
  - lib/braintree/us_bank_account.rb
173
175
  - lib/braintree/us_bank_account_gateway.rb
@@ -188,14 +190,12 @@ files:
188
190
  - lib/braintree/xml/generator.rb
189
191
  - lib/braintree/xml/libxml.rb
190
192
  - lib/braintree/xml/parser.rb
191
- - lib/braintree/xml/rexml.rb
192
193
  - lib/ssl/api_braintreegateway_com.ca.crt
193
194
  - lib/ssl/securetrust_ca.crt
194
195
  - spec/fixtures/files/bt_logo.png
195
196
  - spec/fixtures/files/gif_extension_bt_logo.gif
196
197
  - spec/fixtures/files/malformed_pdf.pdf
197
198
  - spec/fixtures/files/too_long.pdf
198
- - spec/hacks/tcp_socket.rb
199
199
  - spec/integration/braintree/add_on_spec.rb
200
200
  - spec/integration/braintree/address_spec.rb
201
201
  - spec/integration/braintree/advanced_search_spec.rb
@@ -203,7 +203,6 @@ files:
203
203
  - spec/integration/braintree/braintree_gateway_spec.rb
204
204
  - spec/integration/braintree/client_api/client_token_spec.rb
205
205
  - spec/integration/braintree/client_api/spec_helper.rb
206
- - spec/integration/braintree/coinbase_spec.rb
207
206
  - spec/integration/braintree/credit_card_spec.rb
208
207
  - spec/integration/braintree/credit_card_verification_search_spec.rb
209
208
  - spec/integration/braintree/credit_card_verification_spec.rb
@@ -217,7 +216,6 @@ files:
217
216
  - spec/integration/braintree/error_codes_spec.rb
218
217
  - spec/integration/braintree/graphql_client_spec.rb
219
218
  - spec/integration/braintree/http_spec.rb
220
- - spec/integration/braintree/masterpass_card_spec.rb
221
219
  - spec/integration/braintree/merchant_account_spec.rb
222
220
  - spec/integration/braintree/merchant_spec.rb
223
221
  - spec/integration/braintree/oauth_spec.rb
@@ -235,7 +233,6 @@ files:
235
233
  - spec/integration/braintree/transaction_search_spec.rb
236
234
  - spec/integration/braintree/transaction_spec.rb
237
235
  - spec/integration/braintree/transaction_us_bank_account_spec.rb
238
- - spec/integration/braintree/transparent_redirect_spec.rb
239
236
  - spec/integration/braintree/us_bank_account_spec.rb
240
237
  - spec/integration/braintree/us_bank_account_verification_search_spec.rb
241
238
  - spec/integration/braintree/us_bank_account_verification_spec.rb
@@ -285,7 +282,6 @@ files:
285
282
  - spec/unit/braintree/transaction/paypal_details_spec.rb
286
283
  - spec/unit/braintree/transaction_search_spec.rb
287
284
  - spec/unit/braintree/transaction_spec.rb
288
- - spec/unit/braintree/transparent_redirect_spec.rb
289
285
  - spec/unit/braintree/unknown_payment_method_spec.rb
290
286
  - spec/unit/braintree/us_bank_account_spec.rb
291
287
  - spec/unit/braintree/us_bank_account_verification_search_spec.rb
@@ -296,7 +292,6 @@ files:
296
292
  - spec/unit/braintree/webhook_notification_spec.rb
297
293
  - spec/unit/braintree/xml/libxml_spec.rb
298
294
  - spec/unit/braintree/xml/parser_spec.rb
299
- - spec/unit/braintree/xml/rexml_spec.rb
300
295
  - spec/unit/braintree/xml_spec.rb
301
296
  - spec/unit/braintree_spec.rb
302
297
  - spec/unit/spec_helper.rb
@@ -307,6 +302,7 @@ metadata:
307
302
  bug_tracker_uri: https://github.com/braintree/braintree_ruby/issues
308
303
  changelog_uri: https://github.com/braintree/braintree_ruby/blob/master/CHANGELOG.md
309
304
  source_code_uri: https://github.com/braintree/braintree_ruby
305
+ documentation_uri: https://developers.braintreepayments.com/
310
306
  post_install_message:
311
307
  rdoc_options: []
312
308
  require_paths:
@@ -315,7 +311,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
315
311
  requirements:
316
312
  - - ">="
317
313
  - !ruby/object:Gem::Version
318
- version: '0'
314
+ version: 2.5.0
319
315
  required_rubygems_version: !ruby/object:Gem::Requirement
320
316
  requirements:
321
317
  - - ">="
@@ -325,5 +321,5 @@ requirements: []
325
321
  rubygems_version: 3.0.8
326
322
  signing_key:
327
323
  specification_version: 4
328
- summary: Braintree Gateway Ruby Client Library
324
+ summary: Braintree Ruby Server SDK
329
325
  test_files: []