braintree 1.2.0 → 1.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/README.rdoc +14 -4
- data/lib/braintree/credit_card.rb +1 -1
- data/lib/braintree/transaction.rb +13 -0
- data/lib/braintree/validation_error_collection.rb +7 -0
- data/lib/braintree/version.rb +1 -1
- data/spec/integration/braintree/credit_card_spec.rb +115 -3
- data/spec/integration/braintree/customer_spec.rb +1 -1
- data/spec/integration/braintree/test/transaction_amounts_spec.rb +2 -2
- data/spec/integration/braintree/transaction_spec.rb +17 -17
- data/spec/unit/braintree/transaction_spec.rb +3 -3
- data/spec/unit/braintree/validation_error_collection_spec.rb +27 -0
- metadata +3 -3
data/README.rdoc
CHANGED
@@ -17,15 +17,25 @@ The Braintree gem provides integration access to the Braintree Gateway.
|
|
17
17
|
Braintree::Configuration.public_key = "a_public_key"
|
18
18
|
Braintree::Configuration.private_key = "a_private_key"
|
19
19
|
|
20
|
-
|
21
|
-
:amount => "
|
20
|
+
result = Braintree::Transaction.sale(
|
21
|
+
:amount => "1000.00",
|
22
22
|
:credit_card => {
|
23
23
|
:number => "5105105105105100",
|
24
24
|
:expiration_date => "05/12"
|
25
25
|
}
|
26
26
|
)
|
27
|
-
|
28
|
-
|
27
|
+
|
28
|
+
if result.success?
|
29
|
+
if result.transaction.status == Braintree::Transaction::Status::Authorized
|
30
|
+
puts "sucess!: #{result.transaction.id}"
|
31
|
+
else
|
32
|
+
puts "Error processing transaction:"
|
33
|
+
puts " code: #{result.transaction.processor_response_code}"
|
34
|
+
puts " text: #{result.transaction.processor_response_text}"
|
35
|
+
end
|
36
|
+
else
|
37
|
+
p result.errors
|
38
|
+
end
|
29
39
|
|
30
40
|
== Bang Methods
|
31
41
|
|
@@ -224,7 +224,7 @@ module Braintree
|
|
224
224
|
def self._update_signature # :nodoc:
|
225
225
|
[
|
226
226
|
:cardholder_name, :cvv, :expiration_date, :expiration_month, :expiration_year, :number, :token,
|
227
|
-
{:options => [:verify_card]},
|
227
|
+
{:options => [:make_default, :verify_card]},
|
228
228
|
{:billing_address => [:company, :country_name, :extended_address, :first_name, :last_name, :locality, :postal_code, :region, :street_address]}
|
229
229
|
]
|
230
230
|
end
|
@@ -119,6 +119,19 @@ module Braintree
|
|
119
119
|
class Transaction
|
120
120
|
include BaseModule
|
121
121
|
|
122
|
+
module Status
|
123
|
+
Authorizing = 'authorizing'
|
124
|
+
Authorized = 'authorized'
|
125
|
+
GatewayRejected = 'gateway_rejected'
|
126
|
+
Failed = 'failed'
|
127
|
+
ProcessorDeclined = 'processor_declined'
|
128
|
+
Settled = 'settled'
|
129
|
+
SettlementFailed = 'settlement_failed'
|
130
|
+
SubmittedForSettlement = 'submitted_for_settlement'
|
131
|
+
Unknown = 'unknown'
|
132
|
+
Voided = 'voided'
|
133
|
+
end
|
134
|
+
|
122
135
|
module Type # :nodoc:
|
123
136
|
Credit = "credit" # :nodoc:
|
124
137
|
Sale = "sale" # :nodoc:
|
@@ -35,6 +35,8 @@ module Braintree
|
|
35
35
|
@errors[index]
|
36
36
|
end
|
37
37
|
|
38
|
+
# Returns an array of ValidationError objects at this level and all nested levels in the error
|
39
|
+
# hierarchy
|
38
40
|
def deep_errors
|
39
41
|
([@errors] + @nested.values.map { |error_collection| error_collection.deep_errors }).flatten
|
40
42
|
end
|
@@ -63,6 +65,11 @@ module Braintree
|
|
63
65
|
@errors.select { |error| error.attribute == attribute.to_s }
|
64
66
|
end
|
65
67
|
|
68
|
+
# Returns an array of ValidationError objects at the given level in the error hierarchy
|
69
|
+
def shallow_errors
|
70
|
+
@errors.dup
|
71
|
+
end
|
72
|
+
|
66
73
|
# The number of errors at this level. This does not include nested errors.
|
67
74
|
def size
|
68
75
|
@errors.size
|
data/lib/braintree/version.rb
CHANGED
@@ -67,7 +67,7 @@ describe Braintree::CreditCard do
|
|
67
67
|
:options => {:verify_card => true}
|
68
68
|
)
|
69
69
|
result.success?.should == false
|
70
|
-
result.credit_card_verification.status.should ==
|
70
|
+
result.credit_card_verification.status.should == Braintree::Transaction::Status::ProcessorDeclined
|
71
71
|
result.credit_card_verification.processor_response_code.should == "2000"
|
72
72
|
result.credit_card_verification.processor_response_text.should == "Do Not Honor"
|
73
73
|
result.credit_card_verification.cvv_response_code.should == "I"
|
@@ -116,6 +116,28 @@ describe Braintree::CreditCard do
|
|
116
116
|
result.success?.should == false
|
117
117
|
result.errors.for(:credit_card).on(:expiration_date)[0].message.should == "Expiration date is invalid."
|
118
118
|
end
|
119
|
+
|
120
|
+
it "can set the default flag" do
|
121
|
+
customer = Braintree::Customer.create!
|
122
|
+
card1 = Braintree::CreditCard.create(
|
123
|
+
:customer_id => customer.id,
|
124
|
+
:number => Braintree::Test::CreditCardNumbers::Visa,
|
125
|
+
:expiration_date => "05/2009"
|
126
|
+
).credit_card
|
127
|
+
card1.should be_default
|
128
|
+
|
129
|
+
card2 = Braintree::CreditCard.create(
|
130
|
+
:customer_id => customer.id,
|
131
|
+
:number => Braintree::Test::CreditCardNumbers::Visa,
|
132
|
+
:expiration_date => "05/2009",
|
133
|
+
:options => {
|
134
|
+
:make_default => true
|
135
|
+
}
|
136
|
+
).credit_card
|
137
|
+
card2.should be_default
|
138
|
+
|
139
|
+
Braintree::CreditCard.find(card1.token).should_not be_default
|
140
|
+
end
|
119
141
|
end
|
120
142
|
|
121
143
|
describe "self.create!" do
|
@@ -221,6 +243,39 @@ describe Braintree::CreditCard do
|
|
221
243
|
credit_card.customer_id.should == customer.id
|
222
244
|
end
|
223
245
|
|
246
|
+
it "create card as default" do
|
247
|
+
customer = Braintree::Customer.create!(
|
248
|
+
:credit_card => {
|
249
|
+
:cardholder_name => "Old Cardholder Name",
|
250
|
+
:number => Braintree::Test::CreditCardNumbers::Visa,
|
251
|
+
:expiration_date => "05/2012"
|
252
|
+
}
|
253
|
+
)
|
254
|
+
card1 = customer.credit_cards[0]
|
255
|
+
|
256
|
+
params = {
|
257
|
+
:credit_card => {
|
258
|
+
:cardholder_name => "Card Holder",
|
259
|
+
:number => Braintree::Test::CreditCardNumbers::Visa,
|
260
|
+
:expiration_date => "05/2012",
|
261
|
+
:options => {:make_default => true}
|
262
|
+
}
|
263
|
+
}
|
264
|
+
tr_data_params = {
|
265
|
+
:credit_card => {
|
266
|
+
:customer_id => customer.id
|
267
|
+
}
|
268
|
+
}
|
269
|
+
tr_data = Braintree::TransparentRedirect.create_credit_card_data({:redirect_url => "http://example.com"}.merge(tr_data_params))
|
270
|
+
query_string_response = SpecHelper.simulate_form_post_for_tr(Braintree::CreditCard.create_credit_card_url, tr_data, params)
|
271
|
+
result = Braintree::CreditCard.create_from_transparent_redirect(query_string_response)
|
272
|
+
result.success?.should == true
|
273
|
+
card2 = result.credit_card
|
274
|
+
|
275
|
+
Braintree::CreditCard.find(card1.token).should_not be_default
|
276
|
+
card2.should be_default
|
277
|
+
end
|
278
|
+
|
224
279
|
it "returns xml with nested errors if validation errors" do
|
225
280
|
customer = Braintree::Customer.create.customer
|
226
281
|
params = {
|
@@ -307,7 +362,7 @@ describe Braintree::CreditCard do
|
|
307
362
|
:options => {:verify_card => true}
|
308
363
|
)
|
309
364
|
update_result.success?.should == false
|
310
|
-
update_result.credit_card_verification.status.should ==
|
365
|
+
update_result.credit_card_verification.status.should == Braintree::Transaction::Status::ProcessorDeclined
|
311
366
|
end
|
312
367
|
|
313
368
|
it "can update the billing address" do
|
@@ -373,6 +428,28 @@ describe Braintree::CreditCard do
|
|
373
428
|
update_result.success?.should == false
|
374
429
|
update_result.errors.for(:credit_card).on(:number)[0].message.should == "Credit card number must be 12-19 digits."
|
375
430
|
end
|
431
|
+
|
432
|
+
it "can update the default" do
|
433
|
+
customer = Braintree::Customer.create!
|
434
|
+
card1 = Braintree::CreditCard.create(
|
435
|
+
:customer_id => customer.id,
|
436
|
+
:number => Braintree::Test::CreditCardNumbers::Visa,
|
437
|
+
:expiration_date => "05/2009"
|
438
|
+
).credit_card
|
439
|
+
card2 = Braintree::CreditCard.create(
|
440
|
+
:customer_id => customer.id,
|
441
|
+
:number => Braintree::Test::CreditCardNumbers::Visa,
|
442
|
+
:expiration_date => "05/2009"
|
443
|
+
).credit_card
|
444
|
+
|
445
|
+
card1.should be_default
|
446
|
+
card2.should_not be_default
|
447
|
+
|
448
|
+
Braintree::CreditCard.update(card2.token, :options => {:make_default => true})
|
449
|
+
|
450
|
+
Braintree::CreditCard.find(card1.token).should_not be_default
|
451
|
+
Braintree::CreditCard.find(card2.token).should be_default
|
452
|
+
end
|
376
453
|
end
|
377
454
|
|
378
455
|
describe "self.update!" do
|
@@ -451,6 +528,41 @@ describe Braintree::CreditCard do
|
|
451
528
|
credit_card.expiration_date.should == "05/2014"
|
452
529
|
credit_card.token.should == new_token
|
453
530
|
end
|
531
|
+
|
532
|
+
it "updates the default credit card" do
|
533
|
+
customer = Braintree::Customer.create!(
|
534
|
+
:credit_card => {
|
535
|
+
:cardholder_name => "Old Cardholder Name",
|
536
|
+
:number => Braintree::Test::CreditCardNumbers::Visa,
|
537
|
+
:expiration_date => "05/2012"
|
538
|
+
}
|
539
|
+
)
|
540
|
+
card1 = customer.credit_cards[0]
|
541
|
+
|
542
|
+
card2 = Braintree::CreditCard.create(
|
543
|
+
:customer_id => customer.id,
|
544
|
+
:number => Braintree::Test::CreditCardNumbers::Visa,
|
545
|
+
:expiration_date => "05/2009"
|
546
|
+
).credit_card
|
547
|
+
|
548
|
+
card1.should be_default
|
549
|
+
card2.should_not be_default
|
550
|
+
|
551
|
+
params = {
|
552
|
+
:credit_card => {
|
553
|
+
:options => {:make_default => true}
|
554
|
+
}
|
555
|
+
}
|
556
|
+
tr_data_params = {
|
557
|
+
:payment_method_token => card2.token
|
558
|
+
}
|
559
|
+
tr_data = Braintree::TransparentRedirect.update_credit_card_data({:redirect_url => "http://example.com"}.merge(tr_data_params))
|
560
|
+
query_string_response = SpecHelper.simulate_form_post_for_tr(Braintree::CreditCard.update_credit_card_url, tr_data, params)
|
561
|
+
result = Braintree::CreditCard.update_from_transparent_redirect(query_string_response)
|
562
|
+
|
563
|
+
Braintree::CreditCard.find(card1.token).should_not be_default
|
564
|
+
Braintree::CreditCard.find(card2.token).should be_default
|
565
|
+
end
|
454
566
|
end
|
455
567
|
|
456
568
|
describe "credit" do
|
@@ -744,7 +856,7 @@ describe Braintree::CreditCard do
|
|
744
856
|
:options => {:verify_card => true}
|
745
857
|
)
|
746
858
|
update_result.success?.should == false
|
747
|
-
update_result.credit_card_verification.status.should ==
|
859
|
+
update_result.credit_card_verification.status.should == Braintree::Transaction::Status::ProcessorDeclined
|
748
860
|
end
|
749
861
|
|
750
862
|
it "can update the billing address" do
|
@@ -110,7 +110,7 @@ describe Braintree::Customer do
|
|
110
110
|
}
|
111
111
|
)
|
112
112
|
result.success?.should == false
|
113
|
-
result.credit_card_verification.status.should ==
|
113
|
+
result.credit_card_verification.status.should == Braintree::Transaction::Status::ProcessorDeclined
|
114
114
|
end
|
115
115
|
|
116
116
|
it "can create a customer, payment method, and billing address at the same time" do
|
@@ -10,7 +10,7 @@ describe Braintree::Test::TransactionAmounts do
|
|
10
10
|
:expiration_date => "12/2012"
|
11
11
|
}
|
12
12
|
)
|
13
|
-
transaction.status.should ==
|
13
|
+
transaction.status.should == Braintree::Transaction::Status::Authorized
|
14
14
|
end
|
15
15
|
end
|
16
16
|
|
@@ -23,7 +23,7 @@ describe Braintree::Test::TransactionAmounts do
|
|
23
23
|
:expiration_date => "12/2012"
|
24
24
|
}
|
25
25
|
)
|
26
|
-
transaction.status.should ==
|
26
|
+
transaction.status.should == Braintree::Transaction::Status::ProcessorDeclined
|
27
27
|
end
|
28
28
|
end
|
29
29
|
end
|
@@ -34,7 +34,7 @@ describe Braintree::Transaction do
|
|
34
34
|
result.success?.should == true
|
35
35
|
result.transaction.id.should =~ /^\w{6}$/
|
36
36
|
result.transaction.type.should == "sale"
|
37
|
-
result.transaction.status.should ==
|
37
|
+
result.transaction.status.should == Braintree::Transaction::Status::ProcessorDeclined
|
38
38
|
result.transaction.processor_response_code.should == "2000"
|
39
39
|
result.transaction.processor_response_text.should == "Do Not Honor"
|
40
40
|
end
|
@@ -296,7 +296,7 @@ describe Braintree::Transaction do
|
|
296
296
|
transaction = result.transaction
|
297
297
|
transaction.id.should =~ /\A\w{6}\z/
|
298
298
|
transaction.type.should == "sale"
|
299
|
-
transaction.status.should ==
|
299
|
+
transaction.status.should == Braintree::Transaction::Status::Authorized
|
300
300
|
transaction.amount.should == BigDecimal.new("100.00")
|
301
301
|
transaction.order_id.should == "123"
|
302
302
|
transaction.processor_response_code.should == "1000"
|
@@ -461,7 +461,7 @@ describe Braintree::Transaction do
|
|
461
461
|
}
|
462
462
|
)
|
463
463
|
result.success?.should == true
|
464
|
-
result.transaction.status.should ==
|
464
|
+
result.transaction.status.should == Braintree::Transaction::Status::SubmittedForSettlement
|
465
465
|
end
|
466
466
|
|
467
467
|
it "can specify the customer id and payment method token" do
|
@@ -563,7 +563,7 @@ describe Braintree::Transaction do
|
|
563
563
|
result = Braintree::Transaction.submit_for_settlement(transaction.id, "999.99")
|
564
564
|
result.success?.should == true
|
565
565
|
result.transaction.amount.should == BigDecimal.new("999.99")
|
566
|
-
result.transaction.status.should ==
|
566
|
+
result.transaction.status.should == Braintree::Transaction::Status::SubmittedForSettlement
|
567
567
|
result.transaction.updated_at.between?(Time.now - 5, Time.now).should == true
|
568
568
|
end
|
569
569
|
|
@@ -606,7 +606,7 @@ describe Braintree::Transaction do
|
|
606
606
|
}
|
607
607
|
)
|
608
608
|
transaction = Braintree::Transaction.submit_for_settlement!(original_transaction.id)
|
609
|
-
transaction.status.should ==
|
609
|
+
transaction.status.should == Braintree::Transaction::Status::SubmittedForSettlement
|
610
610
|
transaction.id.should == original_transaction.id
|
611
611
|
end
|
612
612
|
|
@@ -773,7 +773,7 @@ describe Braintree::Transaction do
|
|
773
773
|
transaction = result.transaction
|
774
774
|
transaction.id.should =~ /\A\w{6}\z/
|
775
775
|
transaction.type.should == "sale"
|
776
|
-
transaction.status.should ==
|
776
|
+
transaction.status.should == Braintree::Transaction::Status::Authorized
|
777
777
|
transaction.amount.should == BigDecimal.new("100.00")
|
778
778
|
transaction.order_id.should == "123"
|
779
779
|
transaction.processor_response_code.should == "1000"
|
@@ -874,7 +874,7 @@ describe Braintree::Transaction do
|
|
874
874
|
result = Braintree::Transaction.void(transaction.id)
|
875
875
|
result.success?.should == true
|
876
876
|
result.transaction.id.should == transaction.id
|
877
|
-
result.transaction.status.should ==
|
877
|
+
result.transaction.status.should == Braintree::Transaction::Status::Voided
|
878
878
|
end
|
879
879
|
|
880
880
|
it "returns an error result if unsuccessful" do
|
@@ -902,7 +902,7 @@ describe Braintree::Transaction do
|
|
902
902
|
)
|
903
903
|
returned_transaction = Braintree::Transaction.void!(transaction.id)
|
904
904
|
returned_transaction.should == transaction
|
905
|
-
returned_transaction.status.should ==
|
905
|
+
returned_transaction.status.should == Braintree::Transaction::Status::Voided
|
906
906
|
end
|
907
907
|
|
908
908
|
it "raises a ValidationsFailed if unsuccessful" do
|
@@ -922,7 +922,7 @@ describe Braintree::Transaction do
|
|
922
922
|
describe "refund" do
|
923
923
|
it "returns a successful result if successful" do
|
924
924
|
transaction = create_transaction_to_refund
|
925
|
-
transaction.status.should ==
|
925
|
+
transaction.status.should == Braintree::Transaction::Status::Settled
|
926
926
|
result = transaction.refund
|
927
927
|
result.success?.should == true
|
928
928
|
result.new_transaction.type.should == "credit"
|
@@ -991,7 +991,7 @@ describe Braintree::Transaction do
|
|
991
991
|
result = transaction.submit_for_settlement("999.99")
|
992
992
|
result.success?.should == true
|
993
993
|
transaction.amount.should == BigDecimal.new("999.99")
|
994
|
-
transaction.status.should ==
|
994
|
+
transaction.status.should == Braintree::Transaction::Status::SubmittedForSettlement
|
995
995
|
transaction.updated_at.between?(Time.now - 5, Time.now).should == true
|
996
996
|
end
|
997
997
|
|
@@ -1021,7 +1021,7 @@ describe Braintree::Transaction do
|
|
1021
1021
|
}
|
1022
1022
|
)
|
1023
1023
|
transaction = original_transaction.submit_for_settlement!
|
1024
|
-
transaction.status.should ==
|
1024
|
+
transaction.status.should == Braintree::Transaction::Status::SubmittedForSettlement
|
1025
1025
|
transaction.id.should == original_transaction.id
|
1026
1026
|
end
|
1027
1027
|
|
@@ -1149,8 +1149,8 @@ describe Braintree::Transaction do
|
|
1149
1149
|
)
|
1150
1150
|
transaction.submit_for_settlement!
|
1151
1151
|
transaction.status_history.size.should == 2
|
1152
|
-
transaction.status_history[0].status.should ==
|
1153
|
-
transaction.status_history[1].status.should ==
|
1152
|
+
transaction.status_history[0].status.should == Braintree::Transaction::Status::Authorized
|
1153
|
+
transaction.status_history[1].status.should == Braintree::Transaction::Status::SubmittedForSettlement
|
1154
1154
|
end
|
1155
1155
|
end
|
1156
1156
|
|
@@ -1216,7 +1216,7 @@ describe Braintree::Transaction do
|
|
1216
1216
|
)
|
1217
1217
|
result.success?.should == true
|
1218
1218
|
transaction = result.transaction
|
1219
|
-
transaction.status.should ==
|
1219
|
+
transaction.status.should == Braintree::Transaction::Status::Authorized
|
1220
1220
|
void_result = transaction.void
|
1221
1221
|
void_result.success?.should == true
|
1222
1222
|
void_result.transaction.should == transaction
|
@@ -1231,7 +1231,7 @@ describe Braintree::Transaction do
|
|
1231
1231
|
:expiration_date => "05/2009"
|
1232
1232
|
}
|
1233
1233
|
)
|
1234
|
-
transaction.status.should ==
|
1234
|
+
transaction.status.should == Braintree::Transaction::Status::ProcessorDeclined
|
1235
1235
|
result = transaction.void
|
1236
1236
|
result.success?.should == false
|
1237
1237
|
result.errors.for(:transaction).on(:base)[0].code.should == Braintree::ErrorCodes::Transaction::CannotBeVoided
|
@@ -1248,7 +1248,7 @@ describe Braintree::Transaction do
|
|
1248
1248
|
}
|
1249
1249
|
)
|
1250
1250
|
transaction.void!.should == transaction
|
1251
|
-
transaction.status.should ==
|
1251
|
+
transaction.status.should == Braintree::Transaction::Status::Voided
|
1252
1252
|
end
|
1253
1253
|
|
1254
1254
|
it "raises a ValidationsFailed if unsuccessful" do
|
@@ -1259,7 +1259,7 @@ describe Braintree::Transaction do
|
|
1259
1259
|
:expiration_date => "05/2009"
|
1260
1260
|
}
|
1261
1261
|
)
|
1262
|
-
transaction.status.should ==
|
1262
|
+
transaction.status.should == Braintree::Transaction::Status::ProcessorDeclined
|
1263
1263
|
expect do
|
1264
1264
|
transaction.void!
|
1265
1265
|
end.to raise_error(Braintree::ValidationsFailed)
|
@@ -82,14 +82,14 @@ describe Braintree::Transaction do
|
|
82
82
|
transaction = Braintree::Transaction._new(
|
83
83
|
:status_history => [
|
84
84
|
{ :timestamp => time, :amount => "12.00", :transaction_source => "API",
|
85
|
-
:user => "larry", :status =>
|
85
|
+
:user => "larry", :status => Braintree::Transaction::Status::Authorized },
|
86
86
|
{ :timestamp => Time.utc(2010,1,15), :amount => "12.00", :transaction_source => "API",
|
87
87
|
:user => "curly", :status => "scheduled_for_settlement"}
|
88
88
|
])
|
89
89
|
transaction.status_history.size.should == 2
|
90
90
|
transaction.status_history[0].user.should == "larry"
|
91
91
|
transaction.status_history[0].amount.should == "12.00"
|
92
|
-
transaction.status_history[0].status.should ==
|
92
|
+
transaction.status_history[0].status.should == Braintree::Transaction::Status::Authorized
|
93
93
|
transaction.status_history[0].transaction_source.should == "API"
|
94
94
|
transaction.status_history[0].timestamp.should == time
|
95
95
|
transaction.status_history[1].user.should == "curly"
|
@@ -119,7 +119,7 @@ describe Braintree::Transaction do
|
|
119
119
|
:id => "1234",
|
120
120
|
:type => "sale",
|
121
121
|
:amount => "100.00",
|
122
|
-
:status =>
|
122
|
+
:status => Braintree::Transaction::Status::Authorized
|
123
123
|
)
|
124
124
|
output = transaction.inspect
|
125
125
|
output.should include(%Q(#<Braintree::Transaction id: "1234", type: "sale", amount: "100.0", status: "authorized"))
|
@@ -145,4 +145,31 @@ describe Braintree::ValidationErrorCollection do
|
|
145
145
|
end
|
146
146
|
end
|
147
147
|
|
148
|
+
describe "shallow_errors" do
|
149
|
+
it "returns errors on one level" do
|
150
|
+
errors = Braintree::ValidationErrorCollection.new(
|
151
|
+
:errors => [
|
152
|
+
{ :attribute => "one", :code => 1, :message => "bad juju" },
|
153
|
+
{ :attribute => "two", :code => 2, :message => "bad juju" }],
|
154
|
+
:nested => {
|
155
|
+
:errors => [{ :attribute => "three", :code => 3, :message => "badder juju"}],
|
156
|
+
:nested_again => {
|
157
|
+
:errors => [{ :attribute => "four", :code => 4, :message => "badder juju"}]
|
158
|
+
}
|
159
|
+
}
|
160
|
+
)
|
161
|
+
errors.shallow_errors.map {|e| e.code}.should == [1, 2]
|
162
|
+
errors.for(:nested).shallow_errors.map {|e| e.code}.should == [3]
|
163
|
+
end
|
164
|
+
|
165
|
+
it "returns an clone of the real array" do
|
166
|
+
errors = Braintree::ValidationErrorCollection.new(
|
167
|
+
:errors => [
|
168
|
+
{ :attribute => "one", :code => 1, :message => "bad juju" },
|
169
|
+
{ :attribute => "two", :code => 2, :message => "bad juju" }]
|
170
|
+
)
|
171
|
+
errors.shallow_errors.pop
|
172
|
+
errors.shallow_errors.map {|e| e.code}.should == [1, 2]
|
173
|
+
end
|
174
|
+
end
|
148
175
|
end
|
metadata
CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
|
|
5
5
|
segments:
|
6
6
|
- 1
|
7
7
|
- 2
|
8
|
-
-
|
9
|
-
version: 1.2.
|
8
|
+
- 1
|
9
|
+
version: 1.2.1
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- Braintree Payment Solutions
|
@@ -14,7 +14,7 @@ autorequire:
|
|
14
14
|
bindir: bin
|
15
15
|
cert_chain: []
|
16
16
|
|
17
|
-
date: 2010-04-
|
17
|
+
date: 2010-04-13 00:00:00 -05:00
|
18
18
|
default_executable:
|
19
19
|
dependencies: []
|
20
20
|
|