braintree 3.3.0 → 3.4.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/braintree.gemspec +1 -1
- data/lib/braintree.rb +2 -1
- data/lib/braintree/account_updater_daily_report.rb +1 -1
- data/lib/braintree/address.rb +1 -1
- data/lib/braintree/apple_pay.rb +1 -1
- data/lib/braintree/apple_pay_card.rb +1 -1
- data/lib/braintree/apple_pay_options.rb +1 -1
- data/lib/braintree/authorization_adjustment.rb +1 -1
- data/lib/braintree/client_token.rb +1 -1
- data/lib/braintree/configuration.rb +11 -11
- data/lib/braintree/connected_merchant_paypal_status_changed.rb +1 -1
- data/lib/braintree/connected_merchant_status_transitioned.rb +1 -1
- data/lib/braintree/credit_card.rb +2 -2
- data/lib/braintree/credit_card_gateway.rb +3 -3
- data/lib/braintree/credit_card_verification.rb +5 -5
- data/lib/braintree/credit_card_verification_search.rb +1 -1
- data/lib/braintree/customer.rb +2 -2
- data/lib/braintree/customer_search.rb +1 -1
- data/lib/braintree/disbursement.rb +1 -1
- data/lib/braintree/dispute.rb +1 -1
- data/lib/braintree/dispute_gateway.rb +2 -2
- data/lib/braintree/dispute_search.rb +2 -2
- data/lib/braintree/document_upload.rb +1 -1
- data/lib/braintree/error_codes.rb +7 -0
- data/lib/braintree/google_pay_card.rb +1 -1
- data/lib/braintree/granted_payment_instrument_update.rb +1 -1
- data/lib/braintree/graphql_client.rb +7 -7
- data/lib/braintree/http.rb +3 -3
- data/lib/braintree/local_payment_completed.rb +1 -1
- data/lib/braintree/local_payment_reversed.rb +19 -0
- data/lib/braintree/merchant.rb +1 -1
- data/lib/braintree/merchant_account.rb +1 -1
- data/lib/braintree/merchant_account_gateway.rb +1 -1
- data/lib/braintree/merchant_gateway.rb +1 -1
- data/lib/braintree/modification.rb +1 -1
- data/lib/braintree/oauth_credentials.rb +1 -1
- data/lib/braintree/oauth_gateway.rb +5 -5
- data/lib/braintree/payment_instrument_type.rb +10 -10
- data/lib/braintree/payment_method_gateway.rb +3 -3
- data/lib/braintree/payment_method_nonce_gateway.rb +1 -1
- data/lib/braintree/plan.rb +1 -1
- data/lib/braintree/processor_response_types.rb +3 -3
- data/lib/braintree/revoked_payment_method_metadata.rb +1 -1
- data/lib/braintree/samsung_pay_card.rb +1 -1
- data/lib/braintree/settlement_batch_summary.rb +2 -2
- data/lib/braintree/subscription.rb +6 -6
- data/lib/braintree/transaction.rb +32 -24
- data/lib/braintree/transaction_gateway.rb +23 -4
- data/lib/braintree/transaction_line_item.rb +1 -1
- data/lib/braintree/transaction_search.rb +3 -1
- data/lib/braintree/unknown_payment_method.rb +1 -1
- data/lib/braintree/us_bank_account.rb +3 -3
- data/lib/braintree/us_bank_account_verification.rb +1 -1
- data/lib/braintree/us_bank_account_verification_gateway.rb +1 -1
- data/lib/braintree/util.rb +4 -4
- data/lib/braintree/venmo_account.rb +1 -1
- data/lib/braintree/version.rb +1 -1
- data/lib/braintree/visa_checkout_card.rb +2 -2
- data/lib/braintree/webhook_notification.rb +28 -19
- data/lib/braintree/webhook_notification_gateway.rb +5 -5
- data/lib/braintree/webhook_testing_gateway.rb +10 -0
- data/lib/braintree/xml/generator.rb +5 -4
- data/lib/braintree/xml/libxml.rb +1 -1
- data/lib/braintree/xml/parser.rb +10 -10
- data/spec/integration/braintree/add_on_spec.rb +1 -1
- data/spec/integration/braintree/address_spec.rb +24 -24
- data/spec/integration/braintree/advanced_search_spec.rb +45 -45
- data/spec/integration/braintree/apple_pay_spec.rb +3 -3
- data/spec/integration/braintree/braintree_gateway_spec.rb +2 -1
- data/spec/integration/braintree/client_api/client_token_spec.rb +14 -14
- data/spec/integration/braintree/client_api/spec_helper.rb +5 -5
- data/spec/integration/braintree/credit_card_spec.rb +119 -119
- data/spec/integration/braintree/credit_card_verification_search_spec.rb +2 -2
- data/spec/integration/braintree/credit_card_verification_spec.rb +1 -1
- data/spec/integration/braintree/customer_search_spec.rb +8 -8
- data/spec/integration/braintree/customer_spec.rb +165 -165
- data/spec/integration/braintree/dispute_search_spec.rb +3 -3
- data/spec/integration/braintree/dispute_spec.rb +6 -6
- data/spec/integration/braintree/error_codes_spec.rb +1 -1
- data/spec/integration/braintree/http_spec.rb +2 -2
- data/spec/integration/braintree/merchant_account_spec.rb +25 -26
- data/spec/integration/braintree/merchant_spec.rb +12 -12
- data/spec/integration/braintree/oauth_spec.rb +11 -11
- data/spec/integration/braintree/payment_method_nonce_spec.rb +12 -12
- data/spec/integration/braintree/payment_method_spec.rb +165 -165
- data/spec/integration/braintree/payment_method_us_bank_account_spec.rb +9 -9
- data/spec/integration/braintree/paypal_account_spec.rb +28 -28
- data/spec/integration/braintree/samsung_pay_card_spec.rb +9 -9
- data/spec/integration/braintree/settlement_batch_summary_spec.rb +8 -8
- data/spec/integration/braintree/subscription_spec.rb +133 -133
- data/spec/integration/braintree/test/transaction_amounts_spec.rb +2 -2
- data/spec/integration/braintree/test_transaction_spec.rb +10 -10
- data/spec/integration/braintree/transaction_search_spec.rb +93 -67
- data/spec/integration/braintree/transaction_spec.rb +498 -344
- data/spec/integration/braintree/transaction_us_bank_account_spec.rb +20 -20
- data/spec/integration/braintree/us_bank_account_spec.rb +6 -6
- data/spec/integration/braintree/us_bank_account_verification_search_spec.rb +7 -7
- data/spec/integration/braintree/us_bank_account_verification_spec.rb +8 -8
- data/spec/integration/braintree/visa_checkout_card_spec.rb +5 -5
- data/spec/integration/spec_helper.rb +2 -2
- data/spec/oauth_test_helper.rb +1 -1
- data/spec/script/httpsd.rb +6 -6
- data/spec/spec_helper.rb +4 -3
- data/spec/unit/braintree/address_spec.rb +1 -1
- data/spec/unit/braintree/apple_pay_card_spec.rb +1 -1
- data/spec/unit/braintree/client_token_spec.rb +2 -2
- data/spec/unit/braintree/configuration_spec.rb +42 -42
- data/spec/unit/braintree/credit_card_spec.rb +7 -7
- data/spec/unit/braintree/credit_card_verification_search_spec.rb +1 -1
- data/spec/unit/braintree/credit_card_verification_spec.rb +2 -2
- data/spec/unit/braintree/customer_spec.rb +3 -3
- data/spec/unit/braintree/disbursement_spec.rb +7 -7
- data/spec/unit/braintree/dispute_spec.rb +8 -8
- data/spec/unit/braintree/error_result_spec.rb +5 -5
- data/spec/unit/braintree/errors_spec.rb +8 -8
- data/spec/unit/braintree/http_spec.rb +5 -5
- data/spec/unit/braintree/merchant_account_spec.rb +1 -1
- data/spec/unit/braintree/payment_method_spec.rb +1 -1
- data/spec/unit/braintree/paypal_account_spec.rb +2 -2
- data/spec/unit/braintree/resource_collection_spec.rb +9 -9
- data/spec/unit/braintree/subscription_search_spec.rb +1 -1
- data/spec/unit/braintree/successful_result_spec.rb +1 -1
- data/spec/unit/braintree/three_d_secure_info_spec.rb +1 -1
- data/spec/unit/braintree/transaction/credit_card_details_spec.rb +3 -3
- data/spec/unit/braintree/transaction/customer_details_spec.rb +1 -1
- data/spec/unit/braintree/transaction/deposit_details_spec.rb +2 -2
- data/spec/unit/braintree/transaction/paypal_details_spec.rb +1 -1
- data/spec/unit/braintree/transaction_search_spec.rb +12 -12
- data/spec/unit/braintree/transaction_spec.rb +25 -17
- data/spec/unit/braintree/util_spec.rb +18 -18
- data/spec/unit/braintree/validation_error_collection_spec.rb +36 -36
- data/spec/unit/braintree/webhook_notification_spec.rb +72 -56
- data/spec/unit/braintree/xml_spec.rb +31 -31
- metadata +3 -3
- data/lib/braintree/settlement_batch.rb +0 -0
@@ -37,7 +37,8 @@ module Braintree
|
|
37
37
|
:shipping_locality,
|
38
38
|
:shipping_postal_code,
|
39
39
|
:shipping_region,
|
40
|
-
:shipping_street_address
|
40
|
+
:shipping_street_address,
|
41
|
+
:store_id,
|
41
42
|
)
|
42
43
|
|
43
44
|
equality_fields :credit_card_expiration_date
|
@@ -59,6 +60,7 @@ module Braintree
|
|
59
60
|
multiple_value_field :status, :allows => Transaction::Status::All
|
60
61
|
multiple_value_field :source
|
61
62
|
multiple_value_field :type, :allows => Transaction::Type::All
|
63
|
+
multiple_value_field :store_ids
|
62
64
|
|
63
65
|
key_value_fields :refund
|
64
66
|
|
@@ -35,7 +35,7 @@ module Braintree
|
|
35
35
|
end
|
36
36
|
|
37
37
|
def self._new(*args) # :nodoc:
|
38
|
-
self.new
|
38
|
+
self.new(*args)
|
39
39
|
end
|
40
40
|
|
41
41
|
def self.find(*args)
|
@@ -45,8 +45,8 @@ module Braintree
|
|
45
45
|
def self.sale(token, transaction_attributes)
|
46
46
|
Configuration.gateway.transaction.sale(transaction_attributes.merge(
|
47
47
|
:payment_method_token => token,
|
48
|
-
:options => {
|
49
|
-
)
|
48
|
+
:options => {:submit_for_settlement => true},
|
49
|
+
),
|
50
50
|
)
|
51
51
|
end
|
52
52
|
|
@@ -18,7 +18,7 @@ module Braintree
|
|
18
18
|
ErrorResult.new(@gateway, response[:api_error_response])
|
19
19
|
else
|
20
20
|
SuccessfulResult.new(
|
21
|
-
:us_bank_account_verification => UsBankAccountVerification._new(response[:us_bank_account_verification])
|
21
|
+
:us_bank_account_verification => UsBankAccountVerification._new(response[:us_bank_account_verification]),
|
22
22
|
)
|
23
23
|
end
|
24
24
|
rescue NotFoundError
|
data/lib/braintree/util.rb
CHANGED
@@ -14,13 +14,13 @@ module Braintree
|
|
14
14
|
else
|
15
15
|
url_encode(full_key) + "=" + url_encode(value)
|
16
16
|
end
|
17
|
-
end.sort *
|
17
|
+
end.sort * "&"
|
18
18
|
end
|
19
19
|
|
20
20
|
def self.parse_query_string(qs)
|
21
|
-
qs.split(
|
22
|
-
pair = couplet.split(
|
23
|
-
result[CGI.unescape(pair[0]).to_sym] = CGI.unescape(pair[1] ||
|
21
|
+
qs.split("&").inject({}) do |result, couplet|
|
22
|
+
pair = couplet.split("=")
|
23
|
+
result[CGI.unescape(pair[0]).to_sym] = CGI.unescape(pair[1] || "")
|
24
24
|
result
|
25
25
|
end
|
26
26
|
end
|
data/lib/braintree/version.rb
CHANGED
@@ -39,7 +39,7 @@ module Braintree
|
|
39
39
|
end
|
40
40
|
|
41
41
|
def _most_recent_verification(attributes)
|
42
|
-
verification = (attributes[:verifications] || []).sort_by{ |verification| verification[:created_at] }.reverse.first
|
42
|
+
verification = (attributes[:verifications] || []).sort_by { |verification| verification[:created_at] }.reverse.first
|
43
43
|
CreditCardVerification._new(verification) if verification
|
44
44
|
end
|
45
45
|
|
@@ -84,7 +84,7 @@ module Braintree
|
|
84
84
|
end
|
85
85
|
|
86
86
|
def self._new(*args) # :nodoc:
|
87
|
-
self.new
|
87
|
+
self.new(*args)
|
88
88
|
end
|
89
89
|
end
|
90
90
|
end
|
@@ -1,12 +1,17 @@
|
|
1
|
-
require
|
1
|
+
require "ostruct"
|
2
2
|
|
3
3
|
module Braintree
|
4
4
|
class WebhookNotification
|
5
5
|
include BaseModule
|
6
6
|
|
7
7
|
module Kind
|
8
|
+
|
9
|
+
AccountUpdaterDailyReport = "account_updater_daily_report"
|
10
|
+
|
8
11
|
Check = "check"
|
9
12
|
|
13
|
+
ConnectedMerchantPayPalStatusChanged = "connected_merchant_paypal_status_changed"
|
14
|
+
ConnectedMerchantStatusTransitioned = "connected_merchant_status_transitioned"
|
10
15
|
Disbursement = "disbursement"
|
11
16
|
DisbursementException = "disbursement_exception"
|
12
17
|
|
@@ -17,6 +22,23 @@ module Braintree
|
|
17
22
|
DisputeDisputed = "dispute_disputed"
|
18
23
|
DisputeExpired = "dispute_expired"
|
19
24
|
|
25
|
+
GrantedPaymentInstrumentRevoked = "granted_payment_instrument_revoked"
|
26
|
+
|
27
|
+
GrantorUpdatedGrantedPaymentMethod = "grantor_updated_granted_payment_method"
|
28
|
+
|
29
|
+
LocalPaymentCompleted = "local_payment_completed"
|
30
|
+
LocalPaymentReversed = "local_payment_reversed"
|
31
|
+
|
32
|
+
OAuthAccessRevoked = "oauth_access_revoked"
|
33
|
+
|
34
|
+
PartnerMerchantConnected = "partner_merchant_connected"
|
35
|
+
PartnerMerchantDisconnected = "partner_merchant_disconnected"
|
36
|
+
PartnerMerchantDeclined = "partner_merchant_declined"
|
37
|
+
|
38
|
+
PaymentMethodRevokedByCustomer = "payment_method_revoked_by_customer"
|
39
|
+
|
40
|
+
RecipientUpdatedGrantedPaymentMethod = "recipient_updated_granted_payment_method"
|
41
|
+
|
20
42
|
SubscriptionCanceled = "subscription_canceled"
|
21
43
|
SubscriptionChargedSuccessfully = "subscription_charged_successfully"
|
22
44
|
SubscriptionChargedUnsuccessfully = "subscription_charged_unsuccessfully"
|
@@ -27,25 +49,10 @@ module Braintree
|
|
27
49
|
|
28
50
|
SubMerchantAccountApproved = "sub_merchant_account_approved"
|
29
51
|
SubMerchantAccountDeclined = "sub_merchant_account_declined"
|
52
|
+
|
30
53
|
TransactionDisbursed = "transaction_disbursed"
|
31
54
|
TransactionSettlementDeclined = "transaction_settlement_declined"
|
32
55
|
TransactionSettled = "transaction_settled"
|
33
|
-
PartnerMerchantConnected = "partner_merchant_connected"
|
34
|
-
PartnerMerchantDisconnected = "partner_merchant_disconnected"
|
35
|
-
PartnerMerchantDeclined = "partner_merchant_declined"
|
36
|
-
|
37
|
-
AccountUpdaterDailyReport = "account_updater_daily_report"
|
38
|
-
|
39
|
-
OAuthAccessRevoked = "oauth_access_revoked"
|
40
|
-
ConnectedMerchantStatusTransitioned = "connected_merchant_status_transitioned"
|
41
|
-
ConnectedMerchantPayPalStatusChanged = "connected_merchant_paypal_status_changed"
|
42
|
-
|
43
|
-
GrantorUpdatedGrantedPaymentMethod = "grantor_updated_granted_payment_method"
|
44
|
-
RecipientUpdatedGrantedPaymentMethod = "recipient_updated_granted_payment_method"
|
45
|
-
GrantedPaymentInstrumentRevoked = "granted_payment_instrument_revoked"
|
46
|
-
PaymentMethodRevokedByCustomer = "payment_method_revoked_by_customer"
|
47
|
-
|
48
|
-
LocalPaymentCompleted = "local_payment_completed"
|
49
56
|
end
|
50
57
|
|
51
58
|
attr_reader :account_updater_daily_report
|
@@ -57,6 +64,7 @@ module Braintree
|
|
57
64
|
attr_reader :revoked_payment_method_metadata
|
58
65
|
attr_reader :kind
|
59
66
|
attr_reader :local_payment_completed
|
67
|
+
attr_reader :local_payment_reversed
|
60
68
|
attr_reader :oauth_access_revocation
|
61
69
|
attr_reader :partner_merchant
|
62
70
|
attr_reader :source_merchant_id
|
@@ -88,7 +96,8 @@ module Braintree
|
|
88
96
|
@connected_merchant_paypal_status_changed = ConnectedMerchantPayPalStatusChanged._new(@subject[:connected_merchant_paypal_status_changed]) if @subject.has_key?(:connected_merchant_paypal_status_changed)
|
89
97
|
@granted_payment_instrument_update = GrantedPaymentInstrumentUpdate._new(@subject[:granted_payment_instrument_update]) if @subject.has_key?(:granted_payment_instrument_update)
|
90
98
|
@revoked_payment_method_metadata = RevokedPaymentMethodMetadata._new(gateway, @subject) if [Kind::GrantedPaymentInstrumentRevoked, Kind::PaymentMethodRevokedByCustomer].include?(@kind)
|
91
|
-
@local_payment_completed = LocalPaymentCompleted._new(@subject[:local_payment]) if @subject.has_key?(:local_payment)
|
99
|
+
@local_payment_completed = LocalPaymentCompleted._new(@subject[:local_payment]) if @subject.has_key?(:local_payment) && Kind::LocalPaymentCompleted == @kind
|
100
|
+
@local_payment_reversed = LocalPaymentReversed._new(@subject[:local_payment_reversed]) if @subject.has_key?(:local_payment_reversed) && Kind::LocalPaymentReversed == @kind
|
92
101
|
end
|
93
102
|
|
94
103
|
def merchant_account
|
@@ -110,7 +119,7 @@ module Braintree
|
|
110
119
|
class << self
|
111
120
|
protected :new
|
112
121
|
def _new(*args) # :nodoc:
|
113
|
-
self.new
|
122
|
+
self.new(*args)
|
114
123
|
end
|
115
124
|
end
|
116
125
|
end
|
@@ -7,8 +7,8 @@ module Braintree
|
|
7
7
|
end
|
8
8
|
|
9
9
|
def parse(signature_string, payload)
|
10
|
-
raise InvalidSignature,
|
11
|
-
raise InvalidSignature,
|
10
|
+
raise InvalidSignature, "signature cannot be nil" if signature_string.nil?
|
11
|
+
raise InvalidSignature, "payload cannot be nil" if payload.nil?
|
12
12
|
if payload =~ /[^A-Za-z0-9+=\/\n]/
|
13
13
|
raise InvalidSignature, "payload contains illegal characters"
|
14
14
|
end
|
@@ -18,7 +18,7 @@ module Braintree
|
|
18
18
|
end
|
19
19
|
|
20
20
|
def verify(challenge)
|
21
|
-
raise InvalidChallenge,
|
21
|
+
raise InvalidChallenge, "challenge contains non-hex characters" unless challenge =~ /\A[a-f0-9]{20,32}\z/
|
22
22
|
digest = Braintree::Digest.hexdigest(@config.private_key, challenge)
|
23
23
|
"#{@config.public_key}|#{digest}"
|
24
24
|
end
|
@@ -34,13 +34,13 @@ module Braintree
|
|
34
34
|
|
35
35
|
def _verify_signature(signature_string, payload)
|
36
36
|
public_key, signature = _matching_signature_pair(signature_string)
|
37
|
-
raise InvalidSignature,
|
37
|
+
raise InvalidSignature, "no matching public key" if public_key.nil?
|
38
38
|
|
39
39
|
signature_matches = [payload, payload + "\n"].any? do |payload|
|
40
40
|
payload_signature = Braintree::Digest.hexdigest(@config.private_key, payload)
|
41
41
|
Braintree::Digest.secure_compare(signature, payload_signature)
|
42
42
|
end
|
43
|
-
raise InvalidSignature,
|
43
|
+
raise InvalidSignature, "signature does not match payload - one has been modified" unless signature_matches
|
44
44
|
end
|
45
45
|
end
|
46
46
|
end
|
@@ -86,6 +86,8 @@ module Braintree
|
|
86
86
|
_payment_method_revoked_by_customer_sample_xml(id)
|
87
87
|
when Braintree::WebhookNotification::Kind::LocalPaymentCompleted
|
88
88
|
_local_payment_completed_sample_xml(id)
|
89
|
+
when Braintree::WebhookNotification::Kind::LocalPaymentReversed
|
90
|
+
_local_payment_reversed_sample_xml(id)
|
89
91
|
else
|
90
92
|
_subscription_sample_xml(id)
|
91
93
|
end
|
@@ -912,5 +914,13 @@ module Braintree
|
|
912
914
|
</local-payment>
|
913
915
|
XML
|
914
916
|
end
|
917
|
+
|
918
|
+
def _local_payment_reversed_sample_xml(id)
|
919
|
+
<<-XML
|
920
|
+
<local-payment-reversed>
|
921
|
+
<payment-id>PAY-XYZ123</payment-id>
|
922
|
+
</local-payment-reversed>
|
923
|
+
XML
|
924
|
+
end
|
915
925
|
end
|
916
926
|
end
|
@@ -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(
|
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?) ? {} : {
|
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
|
-
|
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
|
data/lib/braintree/xml/libxml.rb
CHANGED
data/lib/braintree/xml/parser.rb
CHANGED
@@ -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 # :nodoc:
|
5
|
-
CONTENT_ROOT =
|
5
|
+
CONTENT_ROOT = "__content__"
|
6
6
|
|
7
7
|
module Parser # :nodoc:
|
8
8
|
XML_PARSING = {
|
@@ -20,9 +20,9 @@ module Braintree
|
|
20
20
|
# Transform into standard Ruby types and convert all keys to snake_case instead of dash-case
|
21
21
|
def self._transform_xml(value)
|
22
22
|
case value.class.to_s
|
23
|
-
when
|
24
|
-
if value[
|
25
|
-
child_key, entries = value.detect { |k,v| k !=
|
23
|
+
when "Hash"
|
24
|
+
if value["type"] == "array"
|
25
|
+
child_key, entries = value.detect { |k,v| k != "type" } # child_key is throwaway
|
26
26
|
if entries.nil? || ((c = value[CONTENT_ROOT]) && c.strip.empty?)
|
27
27
|
[]
|
28
28
|
else
|
@@ -37,21 +37,21 @@ module Braintree
|
|
37
37
|
end
|
38
38
|
elsif value.has_key?(CONTENT_ROOT)
|
39
39
|
content = value[CONTENT_ROOT]
|
40
|
-
if parser = XML_PARSING[value["type"]]
|
40
|
+
if (parser = XML_PARSING[value["type"]])
|
41
41
|
XML_PARSING[value["type"]].call(content)
|
42
42
|
else
|
43
43
|
content
|
44
44
|
end
|
45
|
-
elsif value[
|
45
|
+
elsif value["type"] == "string" && value["nil"] != "true"
|
46
46
|
""
|
47
47
|
elsif value == {}
|
48
48
|
""
|
49
|
-
elsif value.nil? || value[
|
49
|
+
elsif value.nil? || value["nil"] == "true"
|
50
50
|
nil
|
51
51
|
# If the type is the only element which makes it then
|
52
52
|
# this still makes the value nil, except if type is
|
53
53
|
# a XML node(where type['value'] is a Hash)
|
54
|
-
elsif value[
|
54
|
+
elsif value["type"] && value.size == 1 && !value["type"].is_a?(::Hash)
|
55
55
|
raise "is this needed?"
|
56
56
|
nil
|
57
57
|
else
|
@@ -61,14 +61,14 @@ module Braintree
|
|
61
61
|
end
|
62
62
|
xml_value
|
63
63
|
end
|
64
|
-
when
|
64
|
+
when "Array"
|
65
65
|
value.map! { |i| _transform_xml(i) }
|
66
66
|
case value.length
|
67
67
|
when 0 then nil
|
68
68
|
when 1 then value.first
|
69
69
|
else value
|
70
70
|
end
|
71
|
-
when
|
71
|
+
when "String"
|
72
72
|
value
|
73
73
|
else
|
74
74
|
raise "can't transform #{value.class.name} - #{value.inspect}"
|
@@ -35,7 +35,7 @@ describe Braintree::AddOn do
|
|
35
35
|
gateway = Braintree::Gateway.new(
|
36
36
|
:client_id => "client_id$#{Braintree::Configuration.environment}$integration_client_id",
|
37
37
|
:client_secret => "client_secret$#{Braintree::Configuration.environment}$integration_client_secret",
|
38
|
-
:logger => Logger.new("/dev/null")
|
38
|
+
:logger => Logger.new("/dev/null"),
|
39
39
|
)
|
40
40
|
|
41
41
|
expect do
|
@@ -15,7 +15,7 @@ describe Braintree::Address do
|
|
15
15
|
:locality => "Chicago",
|
16
16
|
:region => "Illinois",
|
17
17
|
:postal_code => "60622",
|
18
|
-
:country_name => "United States of America"
|
18
|
+
:country_name => "United States of America",
|
19
19
|
)
|
20
20
|
result.success?.should == true
|
21
21
|
result.address.customer_id.should == customer.id
|
@@ -39,7 +39,7 @@ describe Braintree::Address do
|
|
39
39
|
:customer_id => customer.id,
|
40
40
|
:country_code_alpha2 => "AS",
|
41
41
|
:country_code_alpha3 => "ASM",
|
42
|
-
:country_code_numeric => "16"
|
42
|
+
:country_code_numeric => "16",
|
43
43
|
)
|
44
44
|
result.success?.should == true
|
45
45
|
result.address.country_name.should == "American Samoa"
|
@@ -52,7 +52,7 @@ describe Braintree::Address do
|
|
52
52
|
customer = Braintree::Customer.create!
|
53
53
|
result = Braintree::Address.create(
|
54
54
|
:customer_id => customer.id,
|
55
|
-
:country_name => "Åland"
|
55
|
+
:country_name => "Åland",
|
56
56
|
)
|
57
57
|
result.success?.should == true
|
58
58
|
result.address.country_name.should == "Åland"
|
@@ -63,47 +63,47 @@ describe Braintree::Address do
|
|
63
63
|
result = Braintree::Address.create(
|
64
64
|
:customer_id => customer.id,
|
65
65
|
:country_code_alpha2 => "AS",
|
66
|
-
:country_code_alpha3 => "USA"
|
66
|
+
:country_code_alpha3 => "USA",
|
67
67
|
)
|
68
68
|
result.success?.should == false
|
69
|
-
result.errors.for(:address).on(:base).map {|e| e.code}.should include(Braintree::ErrorCodes::Address::InconsistentCountry)
|
69
|
+
result.errors.for(:address).on(:base).map { |e| e.code }.should include(Braintree::ErrorCodes::Address::InconsistentCountry)
|
70
70
|
end
|
71
71
|
|
72
72
|
it "returns an error response given an invalid country_code_alpha2" do
|
73
73
|
customer = Braintree::Customer.create!
|
74
74
|
result = Braintree::Address.create(
|
75
75
|
:customer_id => customer.id,
|
76
|
-
:country_code_alpha2 => "zz"
|
76
|
+
:country_code_alpha2 => "zz",
|
77
77
|
)
|
78
78
|
result.success?.should == false
|
79
|
-
result.errors.for(:address).on(:country_code_alpha2).map {|e| e.code}.should include(Braintree::ErrorCodes::Address::CountryCodeAlpha2IsNotAccepted)
|
79
|
+
result.errors.for(:address).on(:country_code_alpha2).map { |e| e.code }.should include(Braintree::ErrorCodes::Address::CountryCodeAlpha2IsNotAccepted)
|
80
80
|
end
|
81
81
|
|
82
82
|
it "returns an error response given an invalid country_code_alpha3" do
|
83
83
|
customer = Braintree::Customer.create!
|
84
84
|
result = Braintree::Address.create(
|
85
85
|
:customer_id => customer.id,
|
86
|
-
:country_code_alpha3 => "zzz"
|
86
|
+
:country_code_alpha3 => "zzz",
|
87
87
|
)
|
88
88
|
result.success?.should == false
|
89
|
-
result.errors.for(:address).on(:country_code_alpha3).map {|e| e.code}.should include(Braintree::ErrorCodes::Address::CountryCodeAlpha3IsNotAccepted)
|
89
|
+
result.errors.for(:address).on(:country_code_alpha3).map { |e| e.code }.should include(Braintree::ErrorCodes::Address::CountryCodeAlpha3IsNotAccepted)
|
90
90
|
end
|
91
91
|
|
92
92
|
it "returns an error response given an invalid country_code_numeric" do
|
93
93
|
customer = Braintree::Customer.create!
|
94
94
|
result = Braintree::Address.create(
|
95
95
|
:customer_id => customer.id,
|
96
|
-
:country_code_numeric => "zz"
|
96
|
+
:country_code_numeric => "zz",
|
97
97
|
)
|
98
98
|
result.success?.should == false
|
99
|
-
result.errors.for(:address).on(:country_code_numeric).map {|e| e.code}.should include(Braintree::ErrorCodes::Address::CountryCodeNumericIsNotAccepted)
|
99
|
+
result.errors.for(:address).on(:country_code_numeric).map { |e| e.code }.should include(Braintree::ErrorCodes::Address::CountryCodeNumericIsNotAccepted)
|
100
100
|
end
|
101
101
|
|
102
102
|
it "returns an error response if invalid" do
|
103
103
|
customer = Braintree::Customer.create!(:last_name => "Wilson")
|
104
104
|
result = Braintree::Address.create(
|
105
105
|
:customer_id => customer.id,
|
106
|
-
:country_name => "United States of Invalid"
|
106
|
+
:country_name => "United States of Invalid",
|
107
107
|
)
|
108
108
|
result.success?.should == false
|
109
109
|
result.errors.for(:address).on(:country_name)[0].message.should == "Country name is not an accepted country."
|
@@ -132,7 +132,7 @@ describe Braintree::Address do
|
|
132
132
|
:locality => "Bartlett",
|
133
133
|
:region => "IL",
|
134
134
|
:postal_code => "60623",
|
135
|
-
:country_name => "United States of America"
|
135
|
+
:country_name => "United States of America",
|
136
136
|
)
|
137
137
|
address.customer_id.should == customer.id
|
138
138
|
address.street_address.should == "1812 E Main St"
|
@@ -148,7 +148,7 @@ describe Braintree::Address do
|
|
148
148
|
expect do
|
149
149
|
Braintree::Address.create!(
|
150
150
|
:customer_id => customer.id,
|
151
|
-
:country_name => "United States of Invalid"
|
151
|
+
:country_name => "United States of Invalid",
|
152
152
|
)
|
153
153
|
end.to raise_error(Braintree::ValidationsFailed)
|
154
154
|
end
|
@@ -226,7 +226,7 @@ describe Braintree::Address do
|
|
226
226
|
:locality => "Old Chicago",
|
227
227
|
:region => "IL",
|
228
228
|
:postal_code => "60620",
|
229
|
-
:country_name => "United States of America"
|
229
|
+
:country_name => "United States of America",
|
230
230
|
)
|
231
231
|
result = Braintree::Address.update(
|
232
232
|
customer.id,
|
@@ -236,7 +236,7 @@ describe Braintree::Address do
|
|
236
236
|
:locality => "Chicago",
|
237
237
|
:region => "Illinois",
|
238
238
|
:postal_code => "60621",
|
239
|
-
:country_name => "United States of America"
|
239
|
+
:country_name => "United States of America",
|
240
240
|
)
|
241
241
|
result.success?.should == true
|
242
242
|
result.address.street_address.should == "123 E New St"
|
@@ -254,12 +254,12 @@ describe Braintree::Address do
|
|
254
254
|
customer = Braintree::Customer.create!(:last_name => "Miller")
|
255
255
|
address = Braintree::Address.create!(
|
256
256
|
:customer_id => customer.id,
|
257
|
-
:country_name => "Angola"
|
257
|
+
:country_name => "Angola",
|
258
258
|
)
|
259
259
|
result = Braintree::Address.update(
|
260
260
|
customer.id,
|
261
261
|
address.id,
|
262
|
-
:country_name => "Azerbaijan"
|
262
|
+
:country_name => "Azerbaijan",
|
263
263
|
)
|
264
264
|
|
265
265
|
result.success?.should == true
|
@@ -273,13 +273,13 @@ describe Braintree::Address do
|
|
273
273
|
customer = Braintree::Customer.create!(:last_name => "Miller")
|
274
274
|
address = Braintree::Address.create!(
|
275
275
|
:customer_id => customer.id,
|
276
|
-
:country_name => "United States of America"
|
276
|
+
:country_name => "United States of America",
|
277
277
|
)
|
278
278
|
result = Braintree::Address.update(
|
279
279
|
customer.id,
|
280
280
|
address.id,
|
281
281
|
:street_address => "123 E New St",
|
282
|
-
:country_name => "United States of Invalid"
|
282
|
+
:country_name => "United States of Invalid",
|
283
283
|
)
|
284
284
|
result.success?.should == false
|
285
285
|
result.errors.for(:address).on(:country_name)[0].message.should == "Country name is not an accepted country."
|
@@ -304,7 +304,7 @@ describe Braintree::Address do
|
|
304
304
|
:locality => "Old Chicago",
|
305
305
|
:region => "IL",
|
306
306
|
:postal_code => "60620",
|
307
|
-
:country_name => "United States of America"
|
307
|
+
:country_name => "United States of America",
|
308
308
|
)
|
309
309
|
updated_address = Braintree::Address.update!(
|
310
310
|
customer.id,
|
@@ -314,7 +314,7 @@ describe Braintree::Address do
|
|
314
314
|
:locality => "Chicago",
|
315
315
|
:region => "Illinois",
|
316
316
|
:postal_code => "60621",
|
317
|
-
:country_name => "United States of America"
|
317
|
+
:country_name => "United States of America",
|
318
318
|
)
|
319
319
|
updated_address.should == address
|
320
320
|
updated_address.street_address.should == "123 E New St"
|
@@ -329,14 +329,14 @@ describe Braintree::Address do
|
|
329
329
|
customer = Braintree::Customer.create!(:last_name => "Miller")
|
330
330
|
address = Braintree::Address.create!(
|
331
331
|
:customer_id => customer.id,
|
332
|
-
:country_name => "United States of America"
|
332
|
+
:country_name => "United States of America",
|
333
333
|
)
|
334
334
|
expect do
|
335
335
|
Braintree::Address.update!(
|
336
336
|
customer.id,
|
337
337
|
address.id,
|
338
338
|
:street_address => "123 E New St",
|
339
|
-
:country_name => "United States of Invalid"
|
339
|
+
:country_name => "United States of Invalid",
|
340
340
|
)
|
341
341
|
end.to raise_error(Braintree::ValidationsFailed)
|
342
342
|
end
|