braintree 2.98.0 → 4.23.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 (308) hide show
  1. checksums.yaml +4 -4
  2. data/LICENSE +1 -1
  3. data/braintree.gemspec +7 -4
  4. data/lib/braintree/account_updater_daily_report.rb +4 -4
  5. data/lib/braintree/ach_mandate.rb +1 -1
  6. data/lib/braintree/add_on_gateway.rb +1 -1
  7. data/lib/braintree/address.rb +7 -27
  8. data/lib/braintree/address_gateway.rb +8 -7
  9. data/lib/braintree/advanced_search.rb +11 -12
  10. data/lib/braintree/apple_pay.rb +4 -4
  11. data/lib/braintree/apple_pay_card.rb +18 -4
  12. data/lib/braintree/apple_pay_options.rb +4 -4
  13. data/lib/braintree/authorization_adjustment.rb +4 -4
  14. data/lib/braintree/base_module.rb +11 -1
  15. data/lib/braintree/bin_data.rb +10 -3
  16. data/lib/braintree/client_token.rb +1 -1
  17. data/lib/braintree/client_token_gateway.rb +4 -3
  18. data/lib/braintree/configuration.rb +35 -35
  19. data/lib/braintree/connected_merchant_paypal_status_changed.rb +2 -2
  20. data/lib/braintree/connected_merchant_status_transitioned.rb +2 -2
  21. data/lib/braintree/credit_card.rb +40 -86
  22. data/lib/braintree/credit_card_gateway.rb +58 -44
  23. data/lib/braintree/credit_card_verification.rb +39 -20
  24. data/lib/braintree/credit_card_verification_gateway.rb +35 -5
  25. data/lib/braintree/credit_card_verification_search.rb +2 -2
  26. data/lib/braintree/customer.rb +23 -88
  27. data/lib/braintree/customer_gateway.rb +17 -32
  28. data/lib/braintree/customer_search.rb +2 -2
  29. data/lib/braintree/descriptor.rb +1 -1
  30. data/lib/braintree/digest.rb +1 -1
  31. data/lib/braintree/disbursement.rb +7 -7
  32. data/lib/braintree/discount_gateway.rb +1 -1
  33. data/lib/braintree/dispute/evidence.rb +1 -1
  34. data/lib/braintree/{transaction/coinbase_details.rb → dispute/paypal_message.rb} +5 -6
  35. data/lib/braintree/dispute/{history_event.rb → status_history.rb} +3 -1
  36. data/lib/braintree/dispute/transaction.rb +3 -1
  37. data/lib/braintree/dispute/transaction_details.rb +1 -1
  38. data/lib/braintree/dispute.rb +47 -6
  39. data/lib/braintree/dispute_gateway.rb +5 -10
  40. data/lib/braintree/dispute_search.rb +8 -4
  41. data/lib/braintree/document_upload.rb +3 -3
  42. data/lib/braintree/document_upload_gateway.rb +3 -3
  43. data/lib/braintree/enriched_customer_data.rb +21 -0
  44. data/lib/braintree/error_codes.rb +217 -175
  45. data/lib/braintree/error_result.rb +2 -3
  46. data/lib/braintree/errors.rb +3 -3
  47. data/lib/braintree/exceptions.rb +6 -5
  48. data/lib/braintree/exchange_rate.rb +13 -0
  49. data/lib/braintree/exchange_rate_quote.rb +24 -0
  50. data/lib/braintree/exchange_rate_quote_gateway.rb +35 -0
  51. data/lib/braintree/exchange_rate_quote_input.rb +21 -0
  52. data/lib/braintree/exchange_rate_quote_request.rb +18 -0
  53. data/lib/braintree/exchange_rate_quote_response.rb +18 -0
  54. data/lib/braintree/facilitated_details.rb +1 -1
  55. data/lib/braintree/facilitator_details.rb +1 -1
  56. data/lib/braintree/gateway.rb +6 -12
  57. data/lib/braintree/{android_pay_card.rb → google_pay_card.rb} +18 -5
  58. data/lib/braintree/granted_payment_instrument_update.rb +2 -2
  59. data/lib/braintree/graphql_client.rb +14 -8
  60. data/lib/braintree/http.rb +9 -10
  61. data/lib/braintree/local_payment_completed/blik_alias.rb +23 -0
  62. data/lib/braintree/local_payment_completed.rb +10 -5
  63. data/lib/braintree/local_payment_expired.rb +21 -0
  64. data/lib/braintree/local_payment_funded.rb +22 -0
  65. data/lib/braintree/local_payment_reversed.rb +19 -0
  66. data/lib/braintree/merchant.rb +4 -4
  67. data/lib/braintree/merchant_account.rb +3 -3
  68. data/lib/braintree/merchant_account_gateway.rb +10 -8
  69. data/lib/braintree/merchant_gateway.rb +1 -1
  70. data/lib/braintree/meta_checkout_card.rb +89 -0
  71. data/lib/braintree/meta_checkout_token.rb +88 -0
  72. data/lib/braintree/modification.rb +4 -4
  73. data/lib/braintree/oauth_credentials.rb +4 -4
  74. data/lib/braintree/oauth_gateway.rb +5 -5
  75. data/lib/braintree/paginated_collection.rb +2 -2
  76. data/lib/braintree/paginated_result.rb +1 -1
  77. data/lib/braintree/payment_instrument_type.rb +14 -13
  78. data/lib/braintree/payment_method_customer_data_updated_metadata.rb +24 -0
  79. data/lib/braintree/payment_method_gateway.rb +52 -22
  80. data/lib/braintree/payment_method_nonce.rb +12 -7
  81. data/lib/braintree/payment_method_nonce_details.rb +40 -0
  82. data/lib/braintree/payment_method_nonce_details_payer_info.rb +32 -0
  83. data/lib/braintree/payment_method_nonce_gateway.rb +14 -3
  84. data/lib/braintree/payment_method_parser.rb +4 -7
  85. data/lib/braintree/paypal_account.rb +3 -2
  86. data/lib/braintree/paypal_account_gateway.rb +5 -5
  87. data/lib/braintree/plan.rb +22 -2
  88. data/lib/braintree/plan_gateway.rb +101 -1
  89. data/lib/braintree/processor_response_types.rb +3 -3
  90. data/lib/braintree/resource_collection.rb +10 -5
  91. data/lib/braintree/revoked_payment_method_metadata.rb +2 -2
  92. data/lib/braintree/risk_data/liability_shift.rb +22 -0
  93. data/lib/braintree/risk_data.rb +10 -3
  94. data/lib/braintree/samsung_pay_card.rb +8 -6
  95. data/lib/braintree/sepa_direct_debit_account.rb +60 -0
  96. data/lib/braintree/sepa_direct_debit_account_gateway.rb +25 -0
  97. data/lib/braintree/sepa_direct_debit_account_nonce_details.rb +28 -0
  98. data/lib/braintree/settlement_batch_summary.rb +2 -2
  99. data/lib/braintree/settlement_batch_summary_gateway.rb +1 -1
  100. data/lib/braintree/sha256_digest.rb +1 -1
  101. data/lib/braintree/subscription/status_details.rb +1 -1
  102. data/lib/braintree/subscription.rb +13 -13
  103. data/lib/braintree/subscription_gateway.rb +6 -6
  104. data/lib/braintree/subscription_search.rb +1 -1
  105. data/lib/braintree/successful_result.rb +5 -4
  106. data/lib/braintree/test/authentication_id.rb +21 -0
  107. data/lib/braintree/test/credit_card.rb +9 -10
  108. data/lib/braintree/test/merchant_account.rb +1 -1
  109. data/lib/braintree/test/nonce.rb +27 -20
  110. data/lib/braintree/test/transaction_amounts.rb +2 -3
  111. data/lib/braintree/test/venmo_sdk.rb +2 -0
  112. data/lib/braintree/testing_gateway.rb +1 -1
  113. data/lib/braintree/three_d_secure_info.rb +23 -11
  114. data/lib/braintree/transaction/address_details.rb +14 -1
  115. data/lib/braintree/transaction/apple_pay_details.rb +13 -10
  116. data/lib/braintree/transaction/credit_card_details.rb +8 -1
  117. data/lib/braintree/transaction/customer_details.rb +3 -2
  118. data/lib/braintree/transaction/disbursement_details.rb +2 -1
  119. data/lib/braintree/transaction/{android_pay_details.rb → google_pay_details.rb} +6 -1
  120. data/lib/braintree/transaction/installment/adjustment.rb +33 -0
  121. data/lib/braintree/transaction/installment.rb +28 -0
  122. data/lib/braintree/transaction/local_payment_details.rb +3 -0
  123. data/lib/braintree/transaction/meta_checkout_card_details.rb +52 -0
  124. data/lib/braintree/transaction/meta_checkout_token_details.rb +54 -0
  125. data/lib/braintree/transaction/package_details.rb +19 -0
  126. data/lib/braintree/transaction/payment_receipt/card_present_data.rb +36 -0
  127. data/lib/braintree/transaction/payment_receipt/merchant_address.rb +19 -0
  128. data/lib/braintree/transaction/payment_receipt.rb +31 -0
  129. data/lib/braintree/transaction/paypal_details.rb +5 -0
  130. data/lib/braintree/transaction/samsung_pay_card_details.rb +3 -1
  131. data/lib/braintree/transaction/sepa_direct_debit_account_details.rb +27 -0
  132. data/lib/braintree/transaction/status_details.rb +1 -1
  133. data/lib/braintree/transaction/subscription_details.rb +3 -1
  134. data/lib/braintree/transaction/us_bank_account_details.rb +2 -1
  135. data/lib/braintree/transaction/visa_checkout_card_details.rb +1 -1
  136. data/lib/braintree/transaction.rb +119 -128
  137. data/lib/braintree/transaction_gateway.rb +138 -64
  138. data/lib/braintree/transaction_line_item.rb +14 -11
  139. data/lib/braintree/transaction_line_item_gateway.rb +1 -1
  140. data/lib/braintree/transaction_review.rb +18 -0
  141. data/lib/braintree/transaction_search.rb +11 -7
  142. data/lib/braintree/unknown_payment_method.rb +2 -2
  143. data/lib/braintree/us_bank_account.rb +5 -5
  144. data/lib/braintree/us_bank_account_verification.rb +24 -16
  145. data/lib/braintree/us_bank_account_verification_gateway.rb +1 -1
  146. data/lib/braintree/us_bank_account_verification_search.rb +1 -1
  147. data/lib/braintree/util.rb +25 -10
  148. data/lib/braintree/validation_error.rb +1 -1
  149. data/lib/braintree/validation_error_collection.rb +3 -3
  150. data/lib/braintree/venmo_account.rb +4 -4
  151. data/lib/braintree/venmo_profile_data.rb +25 -0
  152. data/lib/braintree/version.rb +2 -2
  153. data/lib/braintree/visa_checkout_card.rb +8 -8
  154. data/lib/braintree/webhook_notification.rb +55 -33
  155. data/lib/braintree/webhook_notification_gateway.rb +9 -9
  156. data/lib/braintree/webhook_testing.rb +1 -1
  157. data/lib/braintree/webhook_testing_gateway.rb +569 -46
  158. data/lib/braintree/xml/generator.rb +6 -5
  159. data/lib/braintree/xml/libxml.rb +1 -1
  160. data/lib/braintree/xml/parser.rb +24 -37
  161. data/lib/braintree/xml/rexml.rb +6 -7
  162. data/lib/braintree/xml.rb +1 -1
  163. data/lib/braintree.rb +41 -24
  164. data/lib/ssl/api_braintreegateway_com.ca.crt +401 -168
  165. data/spec/integration/braintree/add_on_spec.rb +10 -10
  166. data/spec/integration/braintree/address_spec.rb +101 -178
  167. data/spec/integration/braintree/advanced_search_spec.rb +93 -93
  168. data/spec/integration/braintree/apple_pay_spec.rb +12 -12
  169. data/spec/integration/braintree/braintree_gateway_spec.rb +2 -1
  170. data/spec/integration/braintree/client_api/client_token_spec.rb +279 -62
  171. data/spec/integration/braintree/client_api/spec_helper.rb +99 -73
  172. data/spec/integration/braintree/credit_card_spec.rb +522 -821
  173. data/spec/integration/braintree/credit_card_verification_search_spec.rb +18 -18
  174. data/spec/integration/braintree/credit_card_verification_spec.rb +219 -30
  175. data/spec/integration/braintree/customer_search_spec.rb +28 -28
  176. data/spec/integration/braintree/customer_spec.rb +840 -757
  177. data/spec/integration/braintree/disbursement_spec.rb +2 -2
  178. data/spec/integration/braintree/discount_spec.rb +9 -9
  179. data/spec/integration/braintree/dispute_search_spec.rb +45 -9
  180. data/spec/integration/braintree/dispute_spec.rb +109 -82
  181. data/spec/integration/braintree/document_upload_spec.rb +29 -17
  182. data/spec/integration/braintree/error_codes_spec.rb +3 -3
  183. data/spec/integration/braintree/exchange_rate_quote_spec.rb +97 -0
  184. data/spec/integration/braintree/graphql_client_spec.rb +0 -2
  185. data/spec/integration/braintree/http_spec.rb +31 -33
  186. data/spec/integration/braintree/merchant_account_spec.rb +155 -156
  187. data/spec/integration/braintree/merchant_spec.rb +71 -192
  188. data/spec/integration/braintree/oauth_spec.rb +72 -72
  189. data/spec/integration/braintree/package_tracking_spec.rb +130 -0
  190. data/spec/integration/braintree/payment_method_nonce_spec.rb +173 -78
  191. data/spec/integration/braintree/payment_method_spec.rb +953 -501
  192. data/spec/integration/braintree/payment_method_us_bank_account_spec.rb +147 -234
  193. data/spec/integration/braintree/paypal_account_spec.rb +74 -72
  194. data/spec/integration/braintree/plan_spec.rb +96 -15
  195. data/spec/integration/braintree/samsung_pay_card_spec.rb +75 -73
  196. data/spec/integration/braintree/sepa_direct_debit_account_spec.rb +194 -0
  197. data/spec/integration/braintree/settlement_batch_summary_spec.rb +18 -18
  198. data/spec/integration/braintree/subscription_spec.rb +507 -513
  199. data/spec/integration/braintree/test/transaction_amounts_spec.rb +4 -4
  200. data/spec/integration/braintree/test_transaction_spec.rb +29 -29
  201. data/spec/integration/braintree/transaction_line_item_spec.rb +12 -6
  202. data/spec/integration/braintree/transaction_search_spec.rb +410 -217
  203. data/spec/integration/braintree/transaction_spec.rb +3252 -2102
  204. data/spec/integration/braintree/transaction_us_bank_account_spec.rb +42 -278
  205. data/spec/integration/braintree/us_bank_account_spec.rb +36 -36
  206. data/spec/integration/braintree/us_bank_account_verification_search_spec.rb +25 -25
  207. data/spec/integration/braintree/us_bank_account_verification_spec.rb +41 -41
  208. data/spec/integration/braintree/visa_checkout_card_spec.rb +62 -62
  209. data/spec/integration/spec_helper.rb +22 -7
  210. data/spec/oauth_test_helper.rb +1 -1
  211. data/spec/script/httpsd.rb +6 -6
  212. data/spec/spec_helper.rb +15 -20
  213. data/spec/unit/braintree/address_spec.rb +9 -17
  214. data/spec/unit/braintree/apple_pay_card_spec.rb +110 -7
  215. data/spec/unit/braintree/base_module_spec.rb +4 -4
  216. data/spec/unit/braintree/client_token_spec.rb +6 -6
  217. data/spec/unit/braintree/configuration_spec.rb +84 -84
  218. data/spec/unit/braintree/credentials_parser_spec.rb +6 -6
  219. data/spec/unit/braintree/credit_card_spec.rb +91 -58
  220. data/spec/unit/braintree/credit_card_verification_gateway_spec.rb +56 -0
  221. data/spec/unit/braintree/credit_card_verification_search_spec.rb +10 -10
  222. data/spec/unit/braintree/credit_card_verification_spec.rb +40 -18
  223. data/spec/unit/braintree/customer_spec.rb +102 -57
  224. data/spec/unit/braintree/digest_spec.rb +5 -6
  225. data/spec/unit/braintree/disbursement_spec.rb +14 -14
  226. data/spec/unit/braintree/dispute_search_spec.rb +6 -2
  227. data/spec/unit/braintree/dispute_spec.rb +144 -66
  228. data/spec/unit/braintree/document_upload_spec.rb +8 -8
  229. data/spec/unit/braintree/enriched_customer_data_spec.rb +41 -0
  230. data/spec/unit/braintree/error_result_spec.rb +11 -11
  231. data/spec/unit/braintree/errors_spec.rb +17 -17
  232. data/spec/unit/braintree/exchange_rate_quote_input_spec.rb +42 -0
  233. data/spec/unit/braintree/exchange_rate_quote_request_spec.rb +82 -0
  234. data/spec/unit/braintree/exchange_rate_quote_response_spec.rb +52 -0
  235. data/spec/unit/braintree/exchange_rate_quote_spec.rb +42 -0
  236. data/spec/unit/braintree/exchange_rate_spec.rb +23 -0
  237. data/spec/unit/braintree/http_spec.rb +19 -17
  238. data/spec/unit/braintree/local_payment_completed_spec.rb +62 -8
  239. data/spec/unit/braintree/local_payment_expired_spec.rb +24 -0
  240. data/spec/unit/braintree/local_payment_funded_spec.rb +34 -0
  241. data/spec/unit/braintree/merchant_account_spec.rb +5 -5
  242. data/spec/unit/braintree/meta_checkout_card_details_spec.rb +60 -0
  243. data/spec/unit/braintree/meta_checkout_card_spec.rb +60 -0
  244. data/spec/unit/braintree/meta_checkout_token_details_spec.rb +63 -0
  245. data/spec/unit/braintree/meta_checkout_token_spec.rb +63 -0
  246. data/spec/unit/braintree/modification_spec.rb +1 -1
  247. data/spec/unit/braintree/package_tracking_spec.rb +77 -0
  248. data/spec/unit/braintree/payment_method_customer_data_updated_metadata_spec.rb +45 -0
  249. data/spec/unit/braintree/payment_method_nonce_details_payer_info_spec.rb +31 -0
  250. data/spec/unit/braintree/payment_method_nonce_details_spec.rb +51 -0
  251. data/spec/unit/braintree/payment_method_nonce_spec.rb +40 -0
  252. data/spec/unit/braintree/payment_method_spec.rb +20 -20
  253. data/spec/unit/braintree/paypal_account_spec.rb +16 -7
  254. data/spec/unit/braintree/resource_collection_spec.rb +34 -5
  255. data/spec/unit/braintree/risk_data/liability_shift.rb +26 -0
  256. data/spec/unit/braintree/risk_data_spec.rb +38 -8
  257. data/spec/unit/braintree/sepa_debit_account_nonce_details_spec.rb +29 -0
  258. data/spec/unit/braintree/sepa_debit_account_spec.rb +86 -0
  259. data/spec/unit/braintree/sha256_digest_spec.rb +1 -1
  260. data/spec/unit/braintree/signature_service_spec.rb +2 -2
  261. data/spec/unit/braintree/subscription_search_spec.rb +18 -18
  262. data/spec/unit/braintree/subscription_spec.rb +8 -8
  263. data/spec/unit/braintree/successful_result_spec.rb +6 -6
  264. data/spec/unit/braintree/three_d_secure_info_spec.rb +37 -17
  265. data/spec/unit/braintree/transaction/credit_card_details_spec.rb +22 -6
  266. data/spec/unit/braintree/transaction/customer_details_spec.rb +3 -2
  267. data/spec/unit/braintree/transaction/deposit_details_spec.rb +4 -4
  268. data/spec/unit/braintree/transaction/installment_spec.rb +25 -0
  269. data/spec/unit/braintree/transaction/local_payment_details_spec.rb +36 -0
  270. data/spec/unit/braintree/transaction/payment_receipt_spec.rb +73 -0
  271. data/spec/unit/braintree/transaction/paypal_details_spec.rb +63 -0
  272. data/spec/unit/braintree/transaction/sepa_direct_debit_account_details_spec.rb +33 -0
  273. data/spec/unit/braintree/transaction_gateway_spec.rb +150 -0
  274. data/spec/unit/braintree/transaction_search_spec.rb +12 -12
  275. data/spec/unit/braintree/transaction_spec.rb +221 -124
  276. data/spec/unit/braintree/unknown_payment_method_spec.rb +4 -4
  277. data/spec/unit/braintree/us_bank_account_spec.rb +2 -2
  278. data/spec/unit/braintree/us_bank_account_verification_search_spec.rb +7 -7
  279. data/spec/unit/braintree/us_bank_account_verification_spec.rb +12 -7
  280. data/spec/unit/braintree/util_spec.rb +78 -44
  281. data/spec/unit/braintree/validation_error_collection_spec.rb +62 -62
  282. data/spec/unit/braintree/validation_error_spec.rb +4 -4
  283. data/spec/unit/braintree/venmo_profile_data_spec.rb +43 -0
  284. data/spec/unit/braintree/webhook_notification_spec.rb +434 -197
  285. data/spec/unit/braintree/xml/libxml_spec.rb +5 -5
  286. data/spec/unit/braintree/xml/parser_spec.rb +27 -22
  287. data/spec/unit/braintree/xml/rexml_spec.rb +5 -5
  288. data/spec/unit/braintree/xml_spec.rb +38 -38
  289. data/spec/unit/braintree_spec.rb +2 -2
  290. metadata +91 -30
  291. data/lib/braintree/amex_express_checkout_card.rb +0 -38
  292. data/lib/braintree/coinbase_account.rb +0 -34
  293. data/lib/braintree/europe_bank_account.rb +0 -36
  294. data/lib/braintree/europe_bank_account_gateway.rb +0 -17
  295. data/lib/braintree/ideal_payment.rb +0 -61
  296. data/lib/braintree/ideal_payment_gateway.rb +0 -19
  297. data/lib/braintree/masterpass_card.rb +0 -81
  298. data/lib/braintree/settlement_batch.rb +0 -0
  299. data/lib/braintree/transaction/amex_express_checkout_details.rb +0 -21
  300. data/lib/braintree/transaction/ideal_payment_details.rb +0 -19
  301. data/lib/braintree/transaction/masterpass_card_details.rb +0 -47
  302. data/lib/braintree/transparent_redirect.rb +0 -40
  303. data/lib/braintree/transparent_redirect_gateway.rb +0 -105
  304. data/spec/hacks/tcp_socket.rb +0 -18
  305. data/spec/integration/braintree/coinbase_spec.rb +0 -34
  306. data/spec/integration/braintree/masterpass_card_spec.rb +0 -97
  307. data/spec/integration/braintree/transparent_redirect_spec.rb +0 -268
  308. data/spec/unit/braintree/transparent_redirect_spec.rb +0 -223
@@ -2,7 +2,7 @@
2
2
  # under the MIT license, copyright (c) 2005-2009 David Heinemeier Hansson
3
3
  module Braintree
4
4
  module Xml
5
- module Generator # :nodoc:
5
+ module Generator
6
6
  XML_TYPE_NAMES = {
7
7
  "Fixnum" => "integer",
8
8
  "Bignum" => "integer",
@@ -12,6 +12,7 @@ module Braintree
12
12
  "Date" => "datetime",
13
13
  "DateTime" => "datetime",
14
14
  "Time" => "datetime",
15
+ "ActiveSupport::TimeWithZone" => "datetime"
15
16
  }
16
17
 
17
18
  XML_FORMATTING_NAMES = {
@@ -25,7 +26,7 @@ module Braintree
25
26
  date_or_time.respond_to?(:xmlschema) ? date_or_time.xmlschema : date_or_time.to_s
26
27
  end,
27
28
  "bigdecimal" => Proc.new do |bigdecimal|
28
- str = bigdecimal.to_s('F')
29
+ str = bigdecimal.to_s("F")
29
30
  if str =~ /\.\d$/
30
31
  str += "0"
31
32
  end
@@ -61,15 +62,15 @@ module Braintree
61
62
  else
62
63
  type_name = XML_TYPE_NAMES[value.class.name]
63
64
 
64
- attributes = ((value.nil? || type_name.nil?) ? {} : { :type => type_name })
65
+ attributes = ((value.nil? || type_name.nil?) ? {} : {:type => type_name})
65
66
  if value.nil?
66
67
  attributes[:nil] = true
67
68
  end
68
69
 
69
- formatting_name = XML_FORMATTING_NAMES[value.class.name]
70
+ formatting_name = XML_FORMATTING_NAMES[value.class.name]
70
71
  options[:builder].tag!(_xml_escape(key),
71
72
  XML_FORMATTING[formatting_name] ? XML_FORMATTING[formatting_name].call(value) : value,
72
- attributes
73
+ attributes,
73
74
  )
74
75
  end
75
76
  end
@@ -2,7 +2,7 @@
2
2
  # under the MIT license, copyright (c) 2005-2009 David Heinemeier Hansson
3
3
  module Braintree
4
4
  module Xml
5
- module Libxml # :nodoc:
5
+ module Libxml
6
6
  LIB_XML_LIMIT = 30000000
7
7
 
8
8
  def self.parse(xml_string)
@@ -1,10 +1,10 @@
1
1
  # Portions of this code were copied and modified from Ruby on Rails, released
2
2
  # under the MIT license, copyright (c) 2005-2009 David Heinemeier Hansson
3
3
  module Braintree
4
- module Xml # :nodoc:
5
- CONTENT_ROOT = '__content__'
4
+ module Xml
5
+ CONTENT_ROOT = "__content__"
6
6
 
7
- module Parser # :nodoc:
7
+ module Parser
8
8
  XML_PARSING = {
9
9
  "datetime" => Proc.new { |time| ::Time.parse(time).utc },
10
10
  "integer" => Proc.new { |integer| integer.to_i },
@@ -13,88 +13,75 @@ module Braintree
13
13
 
14
14
  def self.hash_from_xml(xml, parser = _determine_parser)
15
15
  standardized_hash_structure = parser.parse(xml)
16
- with_underscores_in_keys = _unrename_keys(standardized_hash_structure)
17
- typecasted_xml = _typecast_xml_value(with_underscores_in_keys)
18
- Util.symbolize_keys(typecasted_xml)
16
+ transformed_xml = _transform_xml(standardized_hash_structure)
17
+ Util.symbolize_keys(transformed_xml)
19
18
  end
20
19
 
21
20
  def self._determine_parser
22
- # LibXML causes a segfault in Ruby 2.0.0. We need to fall back to Rexml to prevent this segfault.
23
- if !RUBY_VERSION.start_with?("2.0") && defined?(::LibXML::XML) && ::LibXML::XML.respond_to?(:default_keep_blanks=)
21
+ # If LibXML is not available, we fall back to REXML
22
+ # This allows us to be compatible with JRuby, which LibXML does not support
23
+ if defined?(::LibXML::XML) && ::LibXML::XML.respond_to?(:default_keep_blanks=)
24
24
  ::Braintree::Xml::Libxml
25
25
  else
26
26
  ::Braintree::Xml::Rexml
27
27
  end
28
28
  end
29
29
 
30
- def self._typecast_xml_value(value)
30
+ # Transform into standard Ruby types and convert all keys to snake_case instead of dash-case
31
+ def self._transform_xml(value)
31
32
  case value.class.to_s
32
- when 'Hash'
33
- if value['type'] == 'array'
34
- child_key, entries = value.detect { |k,v| k != 'type' } # child_key is throwaway
33
+ when "Hash"
34
+ if value["type"] == "array"
35
+ _child_key, entries = value.detect { |k,_v| k != "type" } # child_key is throwaway
35
36
  if entries.nil? || ((c = value[CONTENT_ROOT]) && c.strip.empty?)
36
37
  []
37
38
  else
38
39
  case entries.class.to_s # something weird with classes not matching here. maybe singleton methods breaking is_a?
39
40
  when "Array"
40
- entries.collect { |v| _typecast_xml_value(v) }
41
+ entries.collect { |v| _transform_xml(v) }
41
42
  when "Hash"
42
- [_typecast_xml_value(entries)]
43
+ [_transform_xml(entries)]
43
44
  else
44
45
  raise "can't typecast #{entries.inspect}"
45
46
  end
46
47
  end
47
48
  elsif value.has_key?(CONTENT_ROOT)
48
49
  content = value[CONTENT_ROOT]
49
- if parser = XML_PARSING[value["type"]]
50
+ if (XML_PARSING[value["type"]])
50
51
  XML_PARSING[value["type"]].call(content)
51
52
  else
52
53
  content
53
54
  end
54
- elsif value['type'] == 'string' && value['nil'] != 'true'
55
+ elsif value["type"] == "string" && value["nil"] != "true"
55
56
  ""
56
57
  elsif value == {}
57
58
  ""
58
- elsif value.nil? || value['nil'] == 'true'
59
+ elsif value.nil? || value["nil"] == "true"
59
60
  nil
60
61
  # If the type is the only element which makes it then
61
62
  # this still makes the value nil, except if type is
62
63
  # a XML node(where type['value'] is a Hash)
63
- elsif value['type'] && value.size == 1 && !value['type'].is_a?(::Hash)
64
+ elsif value["type"] && value.size == 1 && !value["type"].is_a?(::Hash)
64
65
  raise "is this needed?"
65
66
  nil
66
67
  else
67
68
  xml_value = value.inject({}) do |h,(k,v)|
68
- h[k] = _typecast_xml_value(v)
69
+ h[k.to_s.tr("-", "_")] = _transform_xml(v) # convert dashes to underscores in keys
69
70
  h
70
71
  end
71
72
  xml_value
72
73
  end
73
- when 'Array'
74
- value.map! { |i| _typecast_xml_value(i) }
74
+ when "Array"
75
+ value.map! { |i| _transform_xml(i) }
75
76
  case value.length
76
77
  when 0 then nil
77
78
  when 1 then value.first
78
79
  else value
79
80
  end
80
- when 'String'
81
+ when "String"
81
82
  value
82
83
  else
83
- raise "can't typecast #{value.class.name} - #{value.inspect}"
84
- end
85
- end
86
-
87
- def self._unrename_keys(params)
88
- case params.class.to_s
89
- when "Hash"
90
- params.inject({}) do |h,(k,v)|
91
- h[k.to_s.tr("-", "_")] = _unrename_keys(v)
92
- h
93
- end
94
- when "Array"
95
- params.map { |v| _unrename_keys(v) }
96
- else
97
- params
84
+ raise "can't transform #{value.class.name} - #{value.inspect}"
98
85
  end
99
86
  end
100
87
  end
@@ -1,13 +1,13 @@
1
1
  # Portions of this code were copied and modified from Ruby on Rails, released
2
2
  # under the MIT license, copyright (c) 2005-2009 David Heinemeier Hansson
3
3
  module Braintree
4
- module Xml # :nodoc:
5
- module Rexml # :nodoc:
4
+ module Xml
5
+ module Rexml
6
6
 
7
- CONTENT_KEY = '__content__'.freeze
7
+ CONTENT_KEY = "__content__".freeze
8
8
 
9
9
  def self.parse(string)
10
- require 'rexml/document' unless defined?(REXML::Document)
10
+ require "rexml/document" unless defined?(REXML::Document)
11
11
  doc = REXML::Document.new(string)
12
12
  _merge_element!({}, doc.root)
13
13
  end
@@ -20,7 +20,7 @@ module Braintree
20
20
  hash = _get_attributes(element)
21
21
 
22
22
  if element.has_elements?
23
- element.each_element {|child| _merge_element!(hash, child) }
23
+ element.each_element { |child| _merge_element!(hash, child) }
24
24
  _merge_texts!(hash, element) unless _empty_content?(element)
25
25
  hash
26
26
  else
@@ -36,7 +36,7 @@ module Braintree
36
36
  _merge!(
37
37
  hash,
38
38
  CONTENT_KEY,
39
- element.texts.map { |t| t.value}.join
39
+ element.texts.map { |t| t.value }.join,
40
40
  )
41
41
  end
42
42
  end
@@ -68,4 +68,3 @@ module Braintree
68
68
  end
69
69
  end
70
70
  end
71
-
data/lib/braintree/xml.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  module Braintree
2
- module Xml # :nodoc:
2
+ module Xml
3
3
  def self.hash_from_xml(xml)
4
4
  Parser.hash_from_xml(xml)
5
5
  end
data/lib/braintree.rb CHANGED
@@ -1,9 +1,8 @@
1
- require 'base64'
1
+ require "base64"
2
2
  require "bigdecimal"
3
3
  require "cgi"
4
4
  require "date"
5
5
  require "digest/sha1"
6
- require "enumerator"
7
6
  require "forwardable"
8
7
  require "logger"
9
8
  require "net/http"
@@ -31,8 +30,6 @@ require "braintree/address"
31
30
  require "braintree/address/country_names"
32
31
  require "braintree/address_gateway"
33
32
  require "braintree/advanced_search"
34
- require "braintree/android_pay_card"
35
- require "braintree/amex_express_checkout_card"
36
33
  require "braintree/apple_pay"
37
34
  require "braintree/apple_pay_card"
38
35
  require "braintree/apple_pay_gateway"
@@ -41,7 +38,6 @@ require "braintree/authorization_adjustment"
41
38
  require "braintree/bin_data"
42
39
  require "braintree/client_token"
43
40
  require "braintree/client_token_gateway"
44
- require "braintree/coinbase_account"
45
41
  require "braintree/configuration"
46
42
  require "braintree/connected_merchant_status_transitioned"
47
43
  require "braintree/connected_merchant_paypal_status_changed"
@@ -62,20 +58,30 @@ require "braintree/discount_gateway"
62
58
  require "braintree/dispute"
63
59
  require "braintree/dispute_gateway"
64
60
  require "braintree/dispute/evidence"
65
- require "braintree/dispute/history_event"
61
+ require "braintree/dispute/paypal_message"
62
+ require "braintree/dispute/status_history"
66
63
  require "braintree/dispute/transaction"
67
64
  require "braintree/dispute/transaction_details"
68
65
  require "braintree/document_upload"
69
66
  require "braintree/document_upload_gateway"
67
+ require "braintree/enriched_customer_data"
70
68
  require "braintree/error_codes"
71
69
  require "braintree/error_result"
72
70
  require "braintree/errors"
71
+ require "braintree/exchange_rate"
72
+ require "braintree/exchange_rate_quote"
73
+ require "braintree/exchange_rate_quote_gateway"
74
+ require "braintree/exchange_rate_quote_input"
75
+ require "braintree/exchange_rate_quote_response"
76
+ require "braintree/exchange_rate_quote_request"
73
77
  require "braintree/gateway"
74
78
  require "braintree/graphql_client"
75
- require "braintree/ideal_payment"
76
- require "braintree/ideal_payment_gateway"
77
- require "braintree/transaction/ideal_payment_details"
79
+ require "braintree/google_pay_card"
78
80
  require "braintree/local_payment_completed"
81
+ require "braintree/local_payment_completed/blik_alias"
82
+ require "braintree/local_payment_reversed"
83
+ require "braintree/local_payment_expired"
84
+ require "braintree/local_payment_funded"
79
85
  require "braintree/transaction/local_payment_details"
80
86
  require "braintree/merchant"
81
87
  require "braintree/merchant_gateway"
@@ -85,12 +91,17 @@ require "braintree/merchant_account/individual_details"
85
91
  require "braintree/merchant_account/business_details"
86
92
  require "braintree/merchant_account/funding_details"
87
93
  require "braintree/merchant_account/address_details"
94
+ require "braintree/meta_checkout_card"
95
+ require "braintree/meta_checkout_token"
88
96
  require "braintree/oauth_gateway"
89
97
  require "braintree/oauth_credentials"
90
98
  require "braintree/payment_instrument_type"
91
99
  require "braintree/payment_method"
100
+ require "braintree/payment_method_customer_data_updated_metadata"
92
101
  require "braintree/payment_method_gateway"
93
102
  require "braintree/payment_method_nonce"
103
+ require "braintree/payment_method_nonce_details"
104
+ require "braintree/payment_method_nonce_details_payer_info"
94
105
  require "braintree/payment_method_nonce_gateway"
95
106
  require "braintree/payment_method_parser"
96
107
  require "braintree/paypal_account"
@@ -99,6 +110,7 @@ require "braintree/plan"
99
110
  require "braintree/plan_gateway"
100
111
  require "braintree/processor_response_types"
101
112
  require "braintree/risk_data"
113
+ require "braintree/risk_data/liability_shift"
102
114
  require "braintree/facilitated_details"
103
115
  require "braintree/facilitator_details"
104
116
  require "braintree/three_d_secure_info"
@@ -108,14 +120,15 @@ require "braintree/resource_collection"
108
120
  require "braintree/revoked_payment_method_metadata"
109
121
  require "braintree/paginated_collection"
110
122
  require "braintree/paginated_result"
111
- require "braintree/europe_bank_account"
112
- require "braintree/europe_bank_account_gateway"
113
123
  require "braintree/us_bank_account"
114
124
  require "braintree/us_bank_account_verification"
115
125
  require "braintree/us_bank_account_verification_gateway"
116
126
  require "braintree/us_bank_account_verification_search"
117
127
  require "braintree/us_bank_account_gateway"
118
128
  require "braintree/transaction/us_bank_account_details"
129
+ require "braintree/sepa_direct_debit_account"
130
+ require "braintree/sepa_direct_debit_account_gateway"
131
+ require "braintree/sepa_direct_debit_account_nonce_details"
119
132
  require "braintree/sha256_digest"
120
133
  require "braintree/signature_service"
121
134
  require "braintree/subscription"
@@ -129,39 +142,43 @@ require "braintree/test/venmo_sdk"
129
142
  require "braintree/test/nonce"
130
143
  require "braintree/test/transaction_amounts"
131
144
  require "braintree/testing_gateway"
132
- require "braintree/transaction"
133
- require "braintree/transaction_line_item"
134
145
  require "braintree/test_transaction"
146
+ require "braintree/transaction"
135
147
  require "braintree/transaction/address_details"
136
148
  require "braintree/transaction/apple_pay_details"
137
- require "braintree/transaction/android_pay_details"
138
- require "braintree/transaction/amex_express_checkout_details"
139
- require "braintree/transaction/coinbase_details"
140
149
  require "braintree/transaction/credit_card_details"
141
150
  require "braintree/transaction/customer_details"
142
151
  require "braintree/transaction/disbursement_details"
152
+ require "braintree/transaction/google_pay_details"
153
+ require "braintree/transaction/installment"
154
+ require "braintree/transaction/installment/adjustment"
155
+ require "braintree/transaction/payment_receipt"
156
+ require "braintree/transaction/payment_receipt/card_present_data.rb"
157
+ require "braintree/transaction/payment_receipt/merchant_address.rb"
158
+ require "braintree/transaction/meta_checkout_card_details"
159
+ require "braintree/transaction/meta_checkout_token_details"
160
+ require "braintree/transaction/package_details"
143
161
  require "braintree/transaction/paypal_details"
144
162
  require "braintree/transaction/paypal_here_details"
163
+ require "braintree/transaction/samsung_pay_card_details"
164
+ require "braintree/transaction/sepa_direct_debit_account_details"
165
+ require "braintree/transaction/status_details"
145
166
  require "braintree/transaction/subscription_details"
167
+ require "braintree/transaction/venmo_account_details"
168
+ require "braintree/transaction/visa_checkout_card_details"
146
169
  require "braintree/transaction_gateway"
170
+ require "braintree/transaction_line_item"
147
171
  require "braintree/transaction_line_item_gateway"
148
172
  require "braintree/transaction_search"
149
- require "braintree/transaction/status_details"
150
- require "braintree/transaction/venmo_account_details"
151
- require "braintree/transaction/visa_checkout_card_details"
152
- require "braintree/transaction/masterpass_card_details"
153
- require "braintree/transaction/samsung_pay_card_details"
154
173
  require "braintree/unknown_payment_method"
155
174
  require "braintree/disbursement"
156
175
  require "braintree/dispute_search"
157
- require "braintree/transparent_redirect"
158
- require "braintree/transparent_redirect_gateway"
159
176
  require "braintree/validation_error"
160
177
  require "braintree/validation_error_collection"
161
178
  require "braintree/venmo_account"
179
+ require "braintree/venmo_profile_data"
162
180
  require "braintree/version"
163
181
  require "braintree/visa_checkout_card"
164
- require "braintree/masterpass_card"
165
182
  require "braintree/samsung_pay_card"
166
183
  require "braintree/webhook_notification"
167
184
  require "braintree/webhook_notification_gateway"