braintree 2.73.0 → 2.74.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 7f6ee2ba1e40805f4be4b05e4668952bfafca47d
4
- data.tar.gz: 6e04b5891b64c947ce4f4557c8d8e01318439041
3
+ metadata.gz: b5ff462a25178db818b2842f450e090a3261bf43
4
+ data.tar.gz: b9274e3d1eacf63c2d6586de28b74bc971269d0f
5
5
  SHA512:
6
- metadata.gz: 19a0991dc5790359da43c5caeb38850dd57d0eb4de82fd5e7f4a1e927bd8a404d5b6f2fdbdf5ca83e613d9c9f19fea0acf03314a1d6d17233f35325ffc2f921c
7
- data.tar.gz: e5db9430c89fa04586fb4495bf68d956d95020ee2a75639b9dd92ec5e26c0dd442df43a8de875ef3e0fc67bf221092b9060352311a5a3f2909bac41ff6c713af
6
+ metadata.gz: 26a48d433fc182bc04d3c975180426dcda4223dd1a241ad1a9e1b423b9e83a06455fd72b14645fb6c3949328de68b86f301c9b6bd14b1fb3cc731ea95263c4d7
7
+ data.tar.gz: 460a9239f0c15f74d0859fcb70b0ac4625025955f3ead20b2f5a791ae55cd9468b2f963906ab28a0c624b8e8c308ca5173b94a47135787fcd2d8c6e424592924
@@ -1,4 +1,4 @@
1
- = Braintree Ruby SDK
1
+ = Braintree Ruby library
2
2
 
3
3
  The Braintree gem provides integration access to the Braintree Gateway.
4
4
 
@@ -35,6 +35,8 @@ require "braintree/client_token"
35
35
  require "braintree/client_token_gateway"
36
36
  require "braintree/coinbase_account"
37
37
  require "braintree/configuration"
38
+ require "braintree/connected_merchant_status_transitioned"
39
+ require "braintree/connected_merchant_paypal_status_changed"
38
40
  require "braintree/credentials_parser"
39
41
  require "braintree/credit_card"
40
42
  require "braintree/credit_card_gateway"
@@ -119,6 +121,8 @@ require "braintree/transaction_gateway"
119
121
  require "braintree/transaction_search"
120
122
  require "braintree/transaction/status_details"
121
123
  require "braintree/transaction/venmo_account_details"
124
+ require "braintree/transaction/visa_checkout_card_details"
125
+ require "braintree/transaction/masterpass_card_details"
122
126
  require "braintree/unknown_payment_method"
123
127
  require "braintree/disbursement"
124
128
  require "braintree/transparent_redirect"
@@ -128,6 +132,8 @@ require "braintree/validation_error"
128
132
  require "braintree/validation_error_collection"
129
133
  require "braintree/venmo_account"
130
134
  require "braintree/version"
135
+ require "braintree/visa_checkout_card"
136
+ require "braintree/masterpass_card"
131
137
  require "braintree/webhook_notification"
132
138
  require "braintree/webhook_notification_gateway"
133
139
  require "braintree/webhook_testing"
@@ -0,0 +1,18 @@
1
+ module Braintree
2
+ class ConnectedMerchantPayPalStatusChanged
3
+ include BaseModule
4
+
5
+ attr_reader :merchant_public_id, :action, :oauth_application_client_id
6
+
7
+ def initialize(attributes)
8
+ set_instance_variables_from_hash(attributes)
9
+ end
10
+
11
+ class << self
12
+ protected :new
13
+ def _new(*args) # :nodoc:
14
+ self.new *args
15
+ end
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,18 @@
1
+ module Braintree
2
+ class ConnectedMerchantStatusTransitioned
3
+ include BaseModule
4
+
5
+ attr_reader :merchant_public_id, :status, :oauth_application_client_id
6
+
7
+ def initialize(attributes)
8
+ set_instance_variables_from_hash(attributes)
9
+ end
10
+
11
+ class << self
12
+ protected :new
13
+ def _new(*args) # :nodoc:
14
+ self.new *args
15
+ end
16
+ end
17
+ end
18
+ end
@@ -13,22 +13,31 @@ module Braintree
13
13
 
14
14
  attr_reader :avs_error_response_code, :avs_postal_code_response_code, :avs_street_address_response_code,
15
15
  :cvv_response_code, :merchant_account_id, :processor_response_code, :processor_response_text, :status,
16
- :id, :gateway_rejection_reason, :credit_card, :billing, :created_at, :risk_data
16
+ :amount, :currency_iso_code, :id, :gateway_rejection_reason, :credit_card, :billing, :created_at,
17
+ :risk_data
17
18
 
18
19
  def initialize(attributes) # :nodoc:
19
20
  set_instance_variables_from_hash(attributes)
21
+
22
+ @amount = Util.to_big_decimal(amount)
23
+
20
24
  @risk_data = RiskData.new(attributes[:risk_data]) if attributes[:risk_data]
21
25
  end
22
26
 
23
27
  def inspect # :nodoc:
24
28
  attr_order = [
25
29
  :status, :processor_response_code, :processor_response_text,
30
+ :amount, :currency_iso_code,
26
31
  :cvv_response_code, :avs_error_response_code,
27
32
  :avs_postal_code_response_code, :avs_street_address_response_code,
28
33
  :merchant_account_id, :gateway_rejection_reason, :id, :credit_card, :billing, :created_at
29
34
  ]
30
35
  formatted_attrs = attr_order.map do |attr|
31
- "#{attr}: #{send(attr).inspect}"
36
+ if attr == :amount
37
+ Util.inspect_amount(self.amount)
38
+ else
39
+ "#{attr}: #{send(attr).inspect}"
40
+ end
32
41
  end
33
42
  "#<#{self.class} #{formatted_attrs.join(", ")}>"
34
43
  end
@@ -4,7 +4,8 @@ module Braintree
4
4
 
5
5
  attr_reader :addresses, :company, :created_at, :credit_cards, :email, :fax, :first_name, :id, :last_name,
6
6
  :phone, :updated_at, :website, :custom_fields, :paypal_accounts, :apple_pay_cards, :coinbase_accounts,
7
- :android_pay_cards, :amex_express_checkout_cards, :venmo_accounts, :us_bank_accounts
7
+ :android_pay_cards, :amex_express_checkout_cards, :venmo_accounts, :us_bank_accounts, :visa_checkout_cards,
8
+ :masterpass_cards
8
9
 
9
10
  def self.all
10
11
  Configuration.gateway.customer.all
@@ -95,6 +96,8 @@ module Braintree
95
96
  @amex_express_checkout_cards = (@amex_express_checkout_cards || []).map { |pm| AmexExpressCheckoutCard._new gateway, pm }
96
97
  @venmo_accounts = (@venmo_accounts || []).map { |pm| VenmoAccount._new gateway, pm }
97
98
  @us_bank_accounts = (@us_bank_accounts || []).map { |pm| UsBankAccount._new gateway, pm }
99
+ @visa_checkout_cards = (@visa_checkout_cards|| []).map { |pm| VisaCheckoutCard._new gateway, pm }
100
+ @masterpass_cards = (@masterpass_cards|| []).map { |pm| MasterpassCard._new gateway, pm }
98
101
  @addresses = (@addresses || []).map { |addr| Address._new gateway, addr }
99
102
  @custom_fields = attributes[:custom_fields].is_a?(Hash) ? attributes[:custom_fields] : {}
100
103
  end
@@ -133,7 +136,8 @@ module Braintree
133
136
  @android_pay_cards +
134
137
  @amex_express_checkout_cards +
135
138
  @venmo_accounts +
136
- @us_bank_accounts
139
+ @us_bank_accounts +
140
+ @visa_checkout_cards
137
141
  end
138
142
 
139
143
  def inspect # :nodoc:
@@ -74,12 +74,16 @@ module Braintree
74
74
  def self._create_signature # :nodoc:
75
75
  credit_card_signature = CreditCardGateway._create_signature - [:customer_id]
76
76
  paypal_account_signature = PayPalAccountGateway._create_nested_signature
77
+ options = [
78
+ :paypal => [:payee_email],
79
+ ]
77
80
  [
78
81
  :company, :email, :fax, :first_name, :id, :last_name, :phone, :website,
79
82
  :device_data, :payment_method_nonce,
80
83
  {:risk_data => [:customer_browser, :customer_ip]},
81
84
  {:credit_card => credit_card_signature},
82
85
  {:paypal_account => paypal_account_signature},
86
+ {:options => options},
83
87
  {:custom_fields => :_any_key_}
84
88
  ]
85
89
  end
@@ -125,10 +129,14 @@ module Braintree
125
129
  credit_card_signature = CreditCardGateway._update_signature - [:customer_id]
126
130
  credit_card_options = credit_card_signature.find { |item| item.respond_to?(:keys) && item.keys == [:options] }
127
131
  credit_card_options[:options] << :update_existing_token
132
+ options = [
133
+ :paypal => [:payee_email],
134
+ ]
128
135
  [
129
136
  :company, :email, :fax, :first_name, :id, :last_name, :phone, :website,
130
137
  :device_data, :payment_method_nonce, :default_payment_method_token,
131
138
  {:credit_card => credit_card_signature},
139
+ {:options => options},
132
140
  {:custom_fields => :_any_key_}
133
141
  ]
134
142
  end
@@ -0,0 +1,66 @@
1
+ module Braintree
2
+ class MasterpassCard
3
+ include BaseModule # :nodoc:
4
+
5
+ attr_reader :billing_address, :bin, :card_type, :cardholder_name,
6
+ :commercial, :country_of_issuance, :created_at, :customer_id,
7
+ :customer_location, :debit, :durbin_regulated, :expiration_month,
8
+ :expiration_year, :healthcare, :issuing_bank, :last_4, :payroll,
9
+ :prepaid, :product_id, :subscriptions, :token, :unique_number_identifier,
10
+ :updated_at, :image_url, :verification
11
+
12
+ def initialize(gateway, attributes) # :nodoc:
13
+ @gateway = gateway
14
+ set_instance_variables_from_hash(attributes)
15
+ @billing_address = attributes[:billing_address] ? Address._new(@gateway, attributes[:billing_address]) : nil
16
+ @subscriptions = (@subscriptions || []).map { |subscription_hash| Subscription._new(@gateway, subscription_hash) }
17
+ @verification = _most_recent_verification(attributes)
18
+ end
19
+
20
+ def _most_recent_verification(attributes)
21
+ verification = (attributes[:verifications] || []).sort_by{ |verification| verification[:created_at] }.reverse.first
22
+ CreditCardVerification._new(verification) if verification
23
+ end
24
+
25
+ def default?
26
+ @default
27
+ end
28
+
29
+ # Expiration date formatted as MM/YYYY
30
+ def expiration_date
31
+ "#{expiration_month}/#{expiration_year}"
32
+ end
33
+
34
+ def expired?
35
+ @expired
36
+ end
37
+
38
+ def ==(other)
39
+ return false unless other.is_a?(MasterpassCard)
40
+ token == other.token
41
+ end
42
+
43
+ def inspect # :nodoc:
44
+ first = [:token]
45
+ order = first + (self.class._attributes - first)
46
+ nice_attributes = order.map do |attr|
47
+ "#{attr}: #{send(attr).inspect}"
48
+ end
49
+ "#<#{self.class} #{nice_attributes.join(', ')}>"
50
+ end
51
+
52
+ def self._attributes # :nodoc:
53
+ [
54
+ :billing_address, :bin, :card_type, :cardholder_name, :created_at,
55
+ :customer_id, :customer_location, :expiration_month, :expiration_year,
56
+ :last_4, :token, :updated_at, :prepaid, :payroll, :product_id,
57
+ :commercial, :debit, :durbin_regulated, :healthcare,
58
+ :country_of_issuance, :issuing_bank, :image_url
59
+ ]
60
+ end
61
+
62
+ def self._new(*args) # :nodoc:
63
+ self.new *args
64
+ end
65
+ end
66
+ end
@@ -9,5 +9,7 @@ module Braintree
9
9
  VenmoAccount = 'venmo_account'
10
10
  UsBankAccount = 'us_bank_account'
11
11
  IdealPayment = 'ideal_payment'
12
+ VisaCheckoutCard = 'visa_checkout_card'
13
+ MasterpassCard = 'masterpass_card'
12
14
  end
13
15
  end
@@ -31,6 +31,10 @@ module Braintree
31
31
  SuccessfulResult.new(:payment_method => AmexExpressCheckoutCard._new(@gateway, response[:amex_express_checkout_card]))
32
32
  elsif response[:venmo_account]
33
33
  SuccessfulResult.new(:payment_method => VenmoAccount._new(@gateway, response[:venmo_account]))
34
+ elsif response[:visa_checkout_card]
35
+ SuccessfulResult.new(:payment_method => VisaCheckoutCard._new(@gateway, response[:visa_checkout_card]))
36
+ elsif response[:masterpass_card]
37
+ SuccessfulResult.new(:payment_method => MasterpassCard._new(@gateway, response[:masterpass_card]))
34
38
  elsif response[:payment_method_nonce]
35
39
  SuccessfulResult.new(:payment_method_nonce => PaymentMethodNonce._new(@gateway, response[:payment_method_nonce]))
36
40
  elsif response[:success]
@@ -43,7 +47,7 @@ module Braintree
43
47
  raise UnexpectedError, "expected :payment_method or :api_error_response"
44
48
  end
45
49
  end
46
-
50
+
47
51
  def delete(token, options = {})
48
52
  Util.verify_keys(PaymentMethodGateway._delete_signature, options)
49
53
  query_param = "?" + Util.hash_to_query_string(options) if not options.empty?
@@ -137,14 +141,18 @@ module Braintree
137
141
  def self._update_signature # :nodoc:
138
142
  _signature(:update)
139
143
  end
140
-
144
+
141
145
  def self._delete_signature # :nodoc:
142
146
  [:revoke_all_grants]
143
147
  end
144
148
 
145
149
  def self._signature(type) # :nodoc:
146
150
  billing_address_params = AddressGateway._shared_signature
147
- options = [:make_default, :verification_merchant_account_id, :verify_card, :venmo_sdk_session, :verification_amount]
151
+ options = [
152
+ :make_default, :verification_merchant_account_id, :verify_card, :venmo_sdk_session,
153
+ :verification_amount,
154
+ :paypal => [:payee_email],
155
+ ]
148
156
  signature = [
149
157
  :billing_address_id, :cardholder_name, :cvv, :device_session_id, :expiration_date,
150
158
  :expiration_month, :expiration_year, :number, :token, :venmo_sdk_payment_method_code,
@@ -45,6 +45,14 @@ module Braintree
45
45
  PayPalFuturePaymentRefreshToken = "fake-paypal-future-refresh-token-nonce"
46
46
  SEPA = "fake-sepa-bank-account-nonce"
47
47
  GatewayRejectedFraud = "fake-gateway-rejected-fraud-nonce"
48
+ MasterpassAmEx = "fake-masterpass-amex-nonce"
49
+ MasterpassDiscover = "fake-masterpass-discover-nonce"
50
+ MasterpassMasterCard = "fake-masterpass-mastercard-nonce"
51
+ MasterpassVisa = "fake-masterpass-visa-nonce"
52
+ VisaCheckoutAmEx = "fake-visa-checkout-amex-nonce"
53
+ VisaCheckoutDiscover = "fake-visa-checkout-discover-nonce"
54
+ VisaCheckoutMasterCard = "fake-visa-checkout-mastercard-nonce"
55
+ VisaCheckoutVisa = "fake-visa-checkout-visa-nonce"
48
56
 
49
57
  def self.const_missing(const_name)
50
58
  if const_name == :AndroidPay
@@ -124,6 +124,8 @@ module Braintree
124
124
  attr_reader :three_d_secure_info
125
125
  attr_reader :us_bank_account_details
126
126
  attr_reader :ideal_payment_details
127
+ attr_reader :visa_checkout_card_details
128
+ attr_reader :masterpass_card_details
127
129
 
128
130
  def self.create(attributes)
129
131
  Configuration.gateway.transaction.create(attributes)
@@ -271,6 +273,8 @@ module Braintree
271
273
  @three_d_secure_info = ThreeDSecureInfo.new(attributes[:three_d_secure_info]) if attributes[:three_d_secure_info]
272
274
  @us_bank_account_details = UsBankAccountDetails.new(attributes[:us_bank_account]) if attributes[:us_bank_account]
273
275
  @ideal_payment_details = IdealPaymentDetails.new(attributes[:ideal_payment]) if attributes[:ideal_payment]
276
+ @visa_checkout_card_details = VisaCheckoutCardDetails.new(attributes[:visa_checkout_card])
277
+ @masterpass_card_details = MasterpassCardDetails.new(attributes[:masterpass_card])
274
278
  end
275
279
 
276
280
  # True if <tt>other</tt> is a Braintree::Transaction with the same id.
@@ -284,7 +288,7 @@ module Braintree
284
288
  order = first + (self.class._attributes - first)
285
289
  nice_attributes = order.map do |attr|
286
290
  if attr == :amount
287
- self.amount ? "amount: #{self.amount.to_s("F").inspect}" : "amount: nil"
291
+ Util.inspect_amount(self.amount)
288
292
  else
289
293
  "#{attr}: #{send(attr).inspect}"
290
294
  end
@@ -0,0 +1,33 @@
1
+ module Braintree
2
+ class Transaction
3
+ class MasterpassCardDetails # :nodoc:
4
+ include BaseModule
5
+
6
+ attr_reader :bin, :card_type, :cardholder_name, :commercial, :country_of_issuance,
7
+ :customer_location, :debit, :durbin_regulated, :expiration_month, :expiration_year,
8
+ :healthcare, :image_url, :issuing_bank, :last_4, :payroll, :prepaid, :product_id,
9
+ :token
10
+
11
+ def initialize(attributes)
12
+ set_instance_variables_from_hash attributes unless attributes.nil?
13
+ end
14
+
15
+ def expiration_date
16
+ "#{expiration_month}/#{expiration_year}"
17
+ end
18
+
19
+ def inspect
20
+ attr_order = [:token, :bin, :last_4, :card_type, :expiration_date, :cardholder_name, :customer_location, :prepaid,
21
+ :healthcare, :durbin_regulated, :debit, :commercial, :payroll, :product_id, :country_of_issuance, :issuing_bank, :image_url]
22
+ formatted_attrs = attr_order.map do |attr|
23
+ "#{attr}: #{send(attr).inspect}"
24
+ end
25
+ "#<#{formatted_attrs.join(", ")}>"
26
+ end
27
+
28
+ def masked_number
29
+ "#{bin}******#{last_4}"
30
+ end
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,33 @@
1
+ module Braintree
2
+ class Transaction
3
+ class VisaCheckoutCardDetails # :nodoc:
4
+ include BaseModule
5
+
6
+ attr_reader :bin, :card_type, :cardholder_name, :commercial, :country_of_issuance,
7
+ :customer_location, :debit, :durbin_regulated, :expiration_month, :expiration_year,
8
+ :healthcare, :image_url, :issuing_bank, :last_4, :payroll, :prepaid, :product_id,
9
+ :token, :call_id
10
+
11
+ def initialize(attributes)
12
+ set_instance_variables_from_hash attributes unless attributes.nil?
13
+ end
14
+
15
+ def expiration_date
16
+ "#{expiration_month}/#{expiration_year}"
17
+ end
18
+
19
+ def inspect
20
+ attr_order = [:token, :bin, :last_4, :card_type, :expiration_date, :cardholder_name, :customer_location, :prepaid,
21
+ :healthcare, :durbin_regulated, :debit, :commercial, :payroll, :product_id, :country_of_issuance, :issuing_bank, :image_url, :call_id]
22
+ formatted_attrs = attr_order.map do |attr|
23
+ "#{attr}: #{send(attr).inspect}"
24
+ end
25
+ "#<#{formatted_attrs.join(", ")}>"
26
+ end
27
+
28
+ def masked_number
29
+ "#{bin}******#{last_4}"
30
+ end
31
+ end
32
+ end
33
+ end
@@ -77,6 +77,10 @@ module Braintree
77
77
  end
78
78
  end
79
79
 
80
+ def self.inspect_amount(amount)
81
+ amount ? "amount: #{amount.to_s("F").inspect}" : "amount: nil"
82
+ end
83
+
80
84
  def self.verify_keys(valid_keys, hash)
81
85
  flattened_valid_keys = _flatten_valid_keys(valid_keys)
82
86
  invalid_keys = _flatten_hash_keys(hash) - flattened_valid_keys
@@ -1,7 +1,7 @@
1
1
  module Braintree
2
2
  module Version
3
3
  Major = 2
4
- Minor = 73
4
+ Minor = 74
5
5
  Tiny = 0
6
6
 
7
7
  String = "#{Major}.#{Minor}.#{Tiny}"
@@ -0,0 +1,74 @@
1
+ module Braintree
2
+ class VisaCheckoutCard
3
+ include BaseModule # :nodoc:
4
+
5
+ attr_reader :billing_address, :bin, :card_type, :cardholder_name,
6
+ :commercial, :country_of_issuance, :created_at, :customer_id,
7
+ :customer_location, :debit, :durbin_regulated, :expiration_month,
8
+ :expiration_year, :healthcare, :issuing_bank, :last_4, :payroll,
9
+ :prepaid, :product_id, :subscriptions, :token, :unique_number_identifier,
10
+ :updated_at, :image_url, :verification, :call_id
11
+
12
+ def initialize(gateway, attributes) # :nodoc:
13
+ @gateway = gateway
14
+ set_instance_variables_from_hash(attributes)
15
+ @billing_address = attributes[:billing_address] ? Address._new(@gateway, attributes[:billing_address]) : nil
16
+ @subscriptions = (@subscriptions || []).map { |subscription_hash| Subscription._new(@gateway, subscription_hash) }
17
+ @verification = _most_recent_verification(attributes)
18
+ end
19
+
20
+ def _most_recent_verification(attributes)
21
+ verification = (attributes[:verifications] || []).sort_by{ |verification| verification[:created_at] }.reverse.first
22
+ CreditCardVerification._new(verification) if verification
23
+ end
24
+
25
+ def default?
26
+ @default
27
+ end
28
+
29
+ # Expiration date formatted as MM/YYYY
30
+ def expiration_date
31
+ "#{expiration_month}/#{expiration_year}"
32
+ end
33
+
34
+ def expired?
35
+ @expired
36
+ end
37
+
38
+ def inspect # :nodoc:
39
+ first = [:token]
40
+ order = first + (self.class._attributes - first)
41
+ nice_attributes = order.map do |attr|
42
+ "#{attr}: #{send(attr).inspect}"
43
+ end
44
+ "#<#{self.class} #{nice_attributes.join(', ')}>"
45
+ end
46
+
47
+ def masked_number
48
+ "#{bin}******#{last_4}"
49
+ end
50
+
51
+ def ==(other)
52
+ return false unless other.is_a?(VisaCheckoutCard)
53
+ token == other.token
54
+ end
55
+
56
+ class << self
57
+ protected :new
58
+ end
59
+
60
+ def self._attributes # :nodoc:
61
+ [
62
+ :billing_address, :bin, :card_type, :cardholder_name, :created_at,
63
+ :customer_id, :customer_location, :expiration_month, :expiration_year,
64
+ :last_4, :token, :updated_at, :prepaid, :payroll, :product_id,
65
+ :commercial, :debit, :durbin_regulated, :healthcare,
66
+ :country_of_issuance, :issuing_bank, :image_url, :call_id
67
+ ]
68
+ end
69
+
70
+ def self._new(*args) # :nodoc:
71
+ self.new *args
72
+ end
73
+ end
74
+ end