braintree 2.73.0 → 2.74.0

Sign up to get free protection for your applications and to get access to all the features.
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