braintree 2.26.0 → 2.27.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -75,6 +75,10 @@ The unit specs can be run by anyone on any system, but the integration specs are
75
75
  server of our gateway code. These integration specs are not meant for public consumption and will likely fail if run on
76
76
  your system.
77
77
 
78
+ == Open Source Attribution
79
+
80
+ A list of open source projects that help power Braintree can be found here[https://www.braintreepayments.com/developers/open-source].
81
+
78
82
  == License
79
83
 
80
84
  See the LICENSE file.
@@ -46,6 +46,10 @@ require "braintree/gateway"
46
46
  require "braintree/http"
47
47
  require "braintree/merchant_account"
48
48
  require "braintree/merchant_account_gateway"
49
+ require "braintree/merchant_account/individual_details"
50
+ require "braintree/merchant_account/business_details"
51
+ require "braintree/merchant_account/funding_details"
52
+ require "braintree/merchant_account/address_details"
49
53
  require "braintree/plan"
50
54
  require "braintree/plan_gateway"
51
55
  require "braintree/settlement_batch_summary"
@@ -243,6 +243,15 @@ module Braintree
243
243
  MasterMerchantAccountIdIsInvalid = "82607"
244
244
  MasterMerchantAccountMustBeActive = "82608"
245
245
  TosAcceptedIsRequired = "82610"
246
+ IdCannotBeUpdated = "82675"
247
+ MasterMerchantAccountIdCannotBeUpdated = "82676"
248
+ CannotBeUpdated = "82674"
249
+ DeclinedOFAC = "82621"
250
+ DeclinedMasterCardMatch = "82622"
251
+ DeclinedFailedKYC = "82623"
252
+ DeclinedSsnInvalid = "82624"
253
+ DeclinedSsnMatchesDeceased = "82625"
254
+ Declined = "82626"
246
255
 
247
256
  module ApplicantDetails
248
257
  FirstNameIsRequired = "82609"
@@ -259,13 +268,17 @@ module Braintree
259
268
  CompanyNameIsRequiredWithTaxId = "82633"
260
269
  TaxIdIsRequiredWithCompanyName = "82634"
261
270
  RoutingNumberIsInvalid = "82635"
262
- DeclinedOFAC = "82621"
263
- DeclinedMasterCardMatch = "82622"
264
- DeclinedFailedKYC = "82623"
265
- DeclinedSsnInvalid = "82624"
266
- DeclinedSsnMatchesDeceased = "82625"
267
- Declined = "82626"
271
+ DeclinedOFAC = "82621" # Keep for backwards compatibility
272
+ DeclinedMasterCardMatch = "82622" # Keep for backwards compatibility
273
+ DeclinedFailedKYC = "82623" # Keep for backwards compatibility
274
+ DeclinedSsnInvalid = "82624" # Keep for backwards compatibility
275
+ DeclinedSsnMatchesDeceased = "82625" # Keep for backwards compatibility
276
+ Declined = "82626" # Keep for backwards compatibility
268
277
  PhoneIsInvalid = "82636"
278
+ DateOfBirthIsInvalid = "82663"
279
+ AccountNumberIsInvalid = "82670"
280
+ EmailAddressIsRequired = "82665"
281
+ TaxIdMustBeBlank = "82673"
269
282
 
270
283
  module Address
271
284
  StreetAddressIsRequired = "82617"
@@ -274,8 +287,59 @@ module Braintree
274
287
  RegionIsRequired = "82620"
275
288
  StreetAddressIsInvalid = "82629"
276
289
  PostalCodeIsInvalid = "82630"
290
+ RegionIsInvalid = "82664"
277
291
  end
278
292
  end
293
+
294
+ module Individual
295
+ FirstNameIsRequired = "82637"
296
+ LastNameIsRequired = "82638"
297
+ DateOfBirthIsRequired = "82639"
298
+ SsnIsInvalid = "82642"
299
+ EmailIsInvalid = "82643"
300
+ FirstNameIsInvalid = "82644"
301
+ LastNameIsInvalid = "82645"
302
+ PhoneIsInvalid = "82656"
303
+ DateOfBirthIsInvalid = "82666"
304
+ EmailIsRequired = "82667"
305
+
306
+ module Address
307
+ StreetAddressIsRequired = "82657"
308
+ LocalityIsRequired = "82658"
309
+ PostalCodeIsRequired = "82659"
310
+ RegionIsRequired = "82660"
311
+ StreetAddressIsInvalid = "82661"
312
+ PostalCodeIsInvalid = "82662"
313
+ RegionIsInvalid = "82668"
314
+ end
315
+ end
316
+
317
+ module Business
318
+ DbaNameIsInvalid = "82646"
319
+ LegalNameIsInvalid = "82677"
320
+ LegalNameIsRequiredWithTaxId = "82669"
321
+ TaxIdIsInvalid = "82647"
322
+ TaxIdIsRequiredWithLegalName = "82648"
323
+ TaxIdMustBeBlank = "82672"
324
+ module Address
325
+ StreetAddressIsInvalid = "82685"
326
+ PostalCodeIsInvalid = "82686"
327
+ RegionIsInvalid = "82684"
328
+ end
329
+ end
330
+
331
+ module Funding
332
+ AccountNumberIsInvalid = "82671"
333
+ AccountNumberIsRequired = "82641"
334
+ DestinationIsInvalid = "82679"
335
+ DestinationIsRequired = "82678"
336
+ EmailIsInvalid = "82681"
337
+ EmailIsRequired = "82680"
338
+ MobilePhoneIsInvalid = "82683"
339
+ MobilePhoneIsRequired = "82682"
340
+ RoutingNumberIsInvalid = "82649"
341
+ RoutingNumberIsRequired = "82640"
342
+ end
279
343
  end
280
344
 
281
345
  module SettlementBatchSummary
@@ -8,16 +8,30 @@ module Braintree
8
8
  Suspended = "suspended"
9
9
  end
10
10
 
11
- attr_reader :status, :id, :master_merchant_account
11
+ module FundingDestinations
12
+ Bank = "bank"
13
+ MobilePhone = "mobile_phone"
14
+ Email = "email"
15
+ end
16
+
17
+ attr_reader :status, :id, :master_merchant_account,
18
+ :individual_details, :business_details, :funding_details
12
19
 
13
20
  def self.create(attributes)
14
21
  Configuration.gateway.merchant_account.create(attributes)
15
22
  end
16
23
 
24
+ def self.update(id, attributes)
25
+ Configuration.gateway.merchant_account.update(id, attributes)
26
+ end
27
+
17
28
  def initialize(gateway, attributes) # :nodoc
18
29
  @gateway = gateway
19
- @master_merchant_account = MerchantAccount._new(@gateway, attributes.delete(:master_merchant_account)) if attributes[:master_merchant_account]
20
30
  set_instance_variables_from_hash(attributes)
31
+ @individual_details = IndividualDetails.new(@individual)
32
+ @business_details = BusinessDetails.new(@business)
33
+ @funding_details = FundingDetails.new(@funding)
34
+ @master_merchant_account = MerchantAccount._new(@gateway, attributes.delete(:master_merchant_account)) if attributes[:master_merchant_account]
21
35
  end
22
36
 
23
37
  class << self
@@ -0,0 +1,13 @@
1
+ module Braintree
2
+ class MerchantAccount
3
+ class AddressDetails
4
+ include BaseModule
5
+
6
+ attr_reader :street_address, :locality, :region, :postal_code
7
+
8
+ def initialize(attributes)
9
+ set_instance_variables_from_hash attributes unless attributes.nil?
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,14 @@
1
+ module Braintree
2
+ class MerchantAccount
3
+ class BusinessDetails
4
+ include BaseModule
5
+
6
+ attr_reader :dba_name, :legal_name, :tax_id, :address_details
7
+
8
+ def initialize(attributes)
9
+ set_instance_variables_from_hash attributes unless attributes.nil?
10
+ @address_details = MerchantAccount::AddressDetails.new(@address)
11
+ end
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,13 @@
1
+ module Braintree
2
+ class MerchantAccount
3
+ class FundingDetails
4
+ include BaseModule
5
+
6
+ attr_reader :account_number_last_4, :destination, :email, :mobile_phone, :routing_number
7
+
8
+ def initialize(attributes)
9
+ set_instance_variables_from_hash attributes unless attributes.nil?
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,15 @@
1
+ module Braintree
2
+ class MerchantAccount
3
+ class IndividualDetails
4
+ include BaseModule
5
+
6
+ attr_reader :first_name, :last_name, :email, :phone, :date_of_birth, :ssn_last_4,
7
+ :address_details
8
+
9
+ def initialize(attributes)
10
+ set_instance_variables_from_hash attributes unless attributes.nil?
11
+ @address_details = MerchantAccount::AddressDetails.new(@address)
12
+ end
13
+ end
14
+ end
15
+ end
@@ -6,10 +6,16 @@ module Braintree
6
6
  end
7
7
 
8
8
  def create(attributes)
9
- Util.verify_keys(MerchantAccountGateway._create_signature, attributes)
9
+ signature = MerchantAccountGateway._detect_signature(attributes)
10
+ Util.verify_keys(signature, attributes)
10
11
  _do_create "/merchant_accounts/create_via_api", :merchant_account => attributes
11
12
  end
12
13
 
14
+ def update(merchant_account_id, attributes)
15
+ Util.verify_keys(MerchantAccountGateway._update_signature, attributes)
16
+ _do_update "/merchant_accounts/#{merchant_account_id}/update_via_api", :merchant_account => attributes
17
+ end
18
+
13
19
  def _do_create(url, params=nil) # :nodoc:
14
20
  response = @config.http.post url, params
15
21
  if response[:api_error_response]
@@ -19,7 +25,25 @@ module Braintree
19
25
  end
20
26
  end
21
27
 
22
- def self._create_signature # :nodoc:
28
+ def _do_update(url, params=nil) # :nodoc:
29
+ response = @config.http.put(url, params)
30
+ if response[:api_error_response]
31
+ ErrorResult.new(@gateway, response[:api_error_response])
32
+ else
33
+ SuccessfulResult.new(:merchant_account => MerchantAccount._new(@gateway, response[:merchant_account]))
34
+ end
35
+ end
36
+
37
+ def self._detect_signature(attributes)
38
+ if attributes.has_key?(:applicant_details)
39
+ warn "[DEPRECATED] Passing :applicant_details to create is deprecated. Please use :individual, :business, and :funding."
40
+ MerchantAccountGateway._deprecated_create_signature
41
+ else
42
+ MerchantAccountGateway._create_signature
43
+ end
44
+ end
45
+
46
+ def self._deprecated_create_signature # :nodoc:
23
47
  [
24
48
  {:applicant_details => [
25
49
  :first_name, :last_name, :email, :date_of_birth, :ssn, :routing_number,
@@ -29,5 +53,27 @@ module Braintree
29
53
  :tos_accepted, :master_merchant_account_id, :id
30
54
  ]
31
55
  end
56
+
57
+ def self._signature # :nodoc:
58
+ [
59
+ {:individual => [
60
+ :first_name, :last_name, :email, :date_of_birth, :ssn, :phone,
61
+ {:address => [:street_address, :locality, :region, :postal_code]}]
62
+ },
63
+ {:business => [
64
+ :dba_name, :legal_name, :tax_id,
65
+ {:address => [:street_address, :locality, :region, :postal_code]}]
66
+ },
67
+ {:funding => [:destination, :email, :mobile_phone, :routing_number, :account_number]}
68
+ ]
69
+ end
70
+
71
+ def self._create_signature # :nodoc:
72
+ _signature + [:tos_accepted, :master_merchant_account_id, :id]
73
+ end
74
+
75
+ def self._update_signature # :nodoc:
76
+ _signature
77
+ end
32
78
  end
33
79
  end
@@ -1,7 +1,7 @@
1
1
  module Braintree
2
2
  module Version
3
3
  Major = 2
4
- Minor = 26
4
+ Minor = 27
5
5
  Tiny = 0
6
6
 
7
7
  String = "#{Major}.#{Minor}.#{Tiny}"
@@ -1 +1 @@
1
- 4588
1
+ 10645
@@ -1,11 +1,11 @@
1
1
  require File.expand_path(File.dirname(__FILE__) + "/../../spec_helper")
2
2
 
3
- VALID_APPLICATION_PARAMS = {
3
+ DEPRECATED_APPLICATION_PARAMS = {
4
4
  :applicant_details => {
5
5
  :first_name => "Joe",
6
6
  :last_name => "Bloggs",
7
7
  :email => "joe@bloggs.com",
8
- :phone => "312-555-1234",
8
+ :phone => "3125551234",
9
9
  :address => {
10
10
  :street_address => "123 Credibility St.",
11
11
  :postal_code => "60606",
@@ -14,7 +14,44 @@ VALID_APPLICATION_PARAMS = {
14
14
  },
15
15
  :date_of_birth => "10/9/1980",
16
16
  :ssn => "123-00-1234",
17
- :routing_number => "121000248",
17
+ :routing_number => "011103093",
18
+ :account_number => "43759348798",
19
+ :tax_id => "111223333",
20
+ :company_name => "Joe's Junkyard"
21
+ },
22
+ :tos_accepted => true,
23
+ :master_merchant_account_id => "sandbox_master_merchant_account"
24
+ }
25
+
26
+ VALID_APPLICATION_PARAMS = {
27
+ :individual => {
28
+ :first_name => "Joe",
29
+ :last_name => "Bloggs",
30
+ :email => "joe@bloggs.com",
31
+ :phone => "3125551234",
32
+ :address => {
33
+ :street_address => "123 Credibility St.",
34
+ :postal_code => "60606",
35
+ :locality => "Chicago",
36
+ :region => "IL",
37
+ },
38
+ :date_of_birth => "10/9/1980",
39
+ :ssn => "123-00-1234",
40
+ },
41
+ :business => {
42
+ :legal_name => "Joe's Bloggs",
43
+ :dba_name => "Joe's Junkyard",
44
+ :tax_id => "123456789",
45
+ :address => {
46
+ :street_address => "456 Fake St",
47
+ :postal_code => "48104",
48
+ :locality => "Ann Arbor",
49
+ :region => "MI",
50
+ }
51
+ },
52
+ :funding => {
53
+ :destination => Braintree::MerchantAccount::FundingDestinations::Bank,
54
+ :routing_number => "011103093",
18
55
  :account_number => "43759348798"
19
56
  },
20
57
  :tos_accepted => true,
@@ -23,7 +60,15 @@ VALID_APPLICATION_PARAMS = {
23
60
 
24
61
  describe Braintree::MerchantAccount do
25
62
  describe "create" do
26
- it "doesn't require an id" do
63
+ it "accepts the deprecated parameters" do
64
+ result = Braintree::MerchantAccount.create(DEPRECATED_APPLICATION_PARAMS)
65
+
66
+ result.should be_success
67
+ result.merchant_account.status.should == Braintree::MerchantAccount::Status::Pending
68
+ result.merchant_account.master_merchant_account.id.should == "sandbox_master_merchant_account"
69
+ end
70
+
71
+ it "creates a merchant account with the new parameters and doesn't require an id" do
27
72
  result = Braintree::MerchantAccount.create(VALID_APPLICATION_PARAMS)
28
73
 
29
74
  result.should be_success
@@ -54,21 +99,270 @@ describe Braintree::MerchantAccount do
54
99
 
55
100
  it "requires all fields" do
56
101
  result = Braintree::MerchantAccount.create(
57
- :master_merchant_account_id => "sandbox_master_merchant_account",
58
- :tos_accepted => true,
59
- :applicant_details => {}
102
+ :master_merchant_account_id => "sandbox_master_merchant_account"
60
103
  )
61
104
  result.should_not be_success
62
- result.errors.for(:merchant_account).for(:applicant_details).on(:first_name).first.code.should == Braintree::ErrorCodes::MerchantAccount::ApplicantDetails::FirstNameIsRequired
105
+ result.errors.for(:merchant_account).on(:tos_accepted).first.code.should == Braintree::ErrorCodes::MerchantAccount::TosAcceptedIsRequired
63
106
  end
64
107
 
65
- it "accepts tax_id and business_name fields" do
108
+ context "funding destination" do
109
+ it "accepts a bank" do
110
+ params = VALID_APPLICATION_PARAMS.dup
111
+ params[:funding][:destination] = ::Braintree::MerchantAccount::FundingDestinations::Bank
112
+ result = Braintree::MerchantAccount.create(params)
113
+
114
+ result.should be_success
115
+ end
116
+
117
+ it "accepts an email" do
118
+ params = VALID_APPLICATION_PARAMS.dup
119
+ params[:funding][:destination] = ::Braintree::MerchantAccount::FundingDestinations::Email
120
+ params[:funding][:email] = "joebloggs@compuserve.com"
121
+ result = Braintree::MerchantAccount.create(params)
122
+
123
+ result.should be_success
124
+ end
125
+
126
+ it "accepts a mobile_phone" do
127
+ params = VALID_APPLICATION_PARAMS.dup
128
+ params[:funding][:destination] = ::Braintree::MerchantAccount::FundingDestinations::MobilePhone
129
+ params[:funding][:mobile_phone] = "3125882300"
130
+ result = Braintree::MerchantAccount.create(params)
131
+
132
+ result.should be_success
133
+ end
134
+ end
135
+ end
136
+
137
+ describe "update" do
138
+ it "updates the Merchant Account info" do
66
139
  params = VALID_APPLICATION_PARAMS.clone
67
- params[:applicant_details][:company_name] = "Test Company"
68
- params[:applicant_details][:tax_id] = "123456789"
69
- result = Braintree::MerchantAccount.create(params)
140
+ params.delete(:tos_accepted)
141
+ params.delete(:master_merchant_account_id)
142
+ params[:individual][:first_name] = "John"
143
+ params[:individual][:last_name] = "Doe"
144
+ params[:individual][:email] = "john.doe@example.com"
145
+ params[:individual][:date_of_birth] = "1970-01-01"
146
+ params[:individual][:phone] = "3125551234"
147
+ params[:individual][:address][:street_address] = "123 Fake St"
148
+ params[:individual][:address][:locality] = "Chicago"
149
+ params[:individual][:address][:region] = "IL"
150
+ params[:individual][:address][:postal_code] = "60622"
151
+ params[:business][:dba_name] = "James's Bloggs"
152
+ params[:business][:legal_name] = "James's Bloggs Inc"
153
+ params[:business][:tax_id] = "123456789"
154
+ params[:business][:address][:street_address] = "999 Fake St"
155
+ params[:business][:address][:locality] = "Miami"
156
+ params[:business][:address][:region] = "FL"
157
+ params[:business][:address][:postal_code] = "99999"
158
+ params[:funding][:account_number] = "43759348798"
159
+ params[:funding][:routing_number] = "071000013"
160
+ params[:funding][:email] = "check@this.com"
161
+ params[:funding][:mobile_phone] = "1234567890"
162
+ params[:funding][:destination] = Braintree::MerchantAccount::FundingDestinations::MobilePhone
163
+ result = Braintree::MerchantAccount.update("sandbox_sub_merchant_account", params)
70
164
  result.should be_success
71
- result.merchant_account.status.should == Braintree::MerchantAccount::Status::Pending
165
+ result.merchant_account.status.should == "active"
166
+ result.merchant_account.id.should == "sandbox_sub_merchant_account"
167
+ result.merchant_account.master_merchant_account.id.should == "sandbox_master_merchant_account"
168
+ result.merchant_account.individual_details.first_name.should == "John"
169
+ result.merchant_account.individual_details.last_name.should == "Doe"
170
+ result.merchant_account.individual_details.email.should == "john.doe@example.com"
171
+ result.merchant_account.individual_details.date_of_birth.should == "1970-01-01"
172
+ result.merchant_account.individual_details.phone.should == "3125551234"
173
+ result.merchant_account.individual_details.address_details.street_address.should == "123 Fake St"
174
+ result.merchant_account.individual_details.address_details.locality.should == "Chicago"
175
+ result.merchant_account.individual_details.address_details.region.should == "IL"
176
+ result.merchant_account.individual_details.address_details.postal_code.should == "60622"
177
+ result.merchant_account.business_details.dba_name.should == "James's Bloggs"
178
+ result.merchant_account.business_details.legal_name.should == "James's Bloggs Inc"
179
+ result.merchant_account.business_details.tax_id.should == "123456789"
180
+ result.merchant_account.business_details.address_details.street_address.should == "999 Fake St"
181
+ result.merchant_account.business_details.address_details.locality.should == "Miami"
182
+ result.merchant_account.business_details.address_details.region.should == "FL"
183
+ result.merchant_account.business_details.address_details.postal_code.should == "99999"
184
+ result.merchant_account.funding_details.account_number_last_4.should == "8798"
185
+ result.merchant_account.funding_details.routing_number.should == "071000013"
186
+ result.merchant_account.funding_details.email.should == "check@this.com"
187
+ result.merchant_account.funding_details.mobile_phone.should == "1234567890"
188
+ result.merchant_account.funding_details.destination.should == Braintree::MerchantAccount::FundingDestinations::MobilePhone
189
+ end
190
+
191
+ it "does not require all fields" do
192
+ result = Braintree::MerchantAccount.update("sandbox_sub_merchant_account", { :individual => { :first_name => "Jose" } })
193
+ result.should be_success
194
+ end
195
+
196
+ it "handles validation errors for blank fields" do
197
+ result = Braintree::MerchantAccount.update(
198
+ "sandbox_sub_merchant_account", {
199
+ :individual => {
200
+ :first_name => "",
201
+ :last_name => "",
202
+ :email => "",
203
+ :phone => "",
204
+ :address => {
205
+ :street_address => "",
206
+ :postal_code => "",
207
+ :locality => "",
208
+ :region => "",
209
+ },
210
+ :date_of_birth => "",
211
+ :ssn => "",
212
+ },
213
+ :business => {
214
+ :legal_name => "",
215
+ :dba_name => "",
216
+ :tax_id => ""
217
+ },
218
+ :funding => {
219
+ :destination => "",
220
+ :routing_number => "",
221
+ :account_number => ""
222
+ },
223
+ }
224
+ )
225
+
226
+ result.should_not be_success
227
+ result.errors.for(:merchant_account).for(:individual).on(:first_name).map(&:code).should == [Braintree::ErrorCodes::MerchantAccount::Individual::FirstNameIsRequired]
228
+ result.errors.for(:merchant_account).for(:individual).on(:last_name).map(&:code).should == [Braintree::ErrorCodes::MerchantAccount::Individual::LastNameIsRequired]
229
+ result.errors.for(:merchant_account).for(:individual).on(:date_of_birth).map(&:code).should == [Braintree::ErrorCodes::MerchantAccount::Individual::DateOfBirthIsRequired]
230
+ result.errors.for(:merchant_account).for(:individual).on(:email).map(&:code).should == [Braintree::ErrorCodes::MerchantAccount::Individual::EmailIsRequired]
231
+ result.errors.for(:merchant_account).for(:individual).for(:address).on(:street_address).map(&:code).should == [Braintree::ErrorCodes::MerchantAccount::Individual::Address::StreetAddressIsRequired]
232
+ result.errors.for(:merchant_account).for(:individual).for(:address).on(:postal_code).map(&:code).should == [Braintree::ErrorCodes::MerchantAccount::Individual::Address::PostalCodeIsRequired]
233
+ result.errors.for(:merchant_account).for(:individual).for(:address).on(:locality).map(&:code).should == [Braintree::ErrorCodes::MerchantAccount::Individual::Address::LocalityIsRequired]
234
+ result.errors.for(:merchant_account).for(:individual).for(:address).on(:region).map(&:code).should == [Braintree::ErrorCodes::MerchantAccount::Individual::Address::RegionIsRequired]
235
+ result.errors.for(:merchant_account).for(:funding).on(:destination).map(&:code).should == [Braintree::ErrorCodes::MerchantAccount::Funding::DestinationIsRequired]
236
+ result.errors.for(:merchant_account).on(:base).should be_empty
237
+ end
238
+
239
+ it "handles validation errors for invalid fields" do
240
+ result = Braintree::MerchantAccount.update(
241
+ "sandbox_sub_merchant_account", {
242
+ :individual => {
243
+ :first_name => "<>",
244
+ :last_name => "<>",
245
+ :email => "bad",
246
+ :phone => "999",
247
+ :address => {
248
+ :street_address => "nope",
249
+ :postal_code => "1",
250
+ :region => "QQ",
251
+ },
252
+ :date_of_birth => "hah",
253
+ :ssn => "12345",
254
+ },
255
+ :business => {
256
+ :legal_name => "``{}",
257
+ :dba_name => "{}``",
258
+ :tax_id => "bad",
259
+ :address => {
260
+ :street_address => "nope",
261
+ :postal_code => "1",
262
+ :region => "QQ",
263
+ },
264
+ },
265
+ :funding => {
266
+ :destination => "MY WALLET",
267
+ :routing_number => "LEATHER",
268
+ :account_number => "BACK POCKET",
269
+ :email => "BILLFOLD",
270
+ :mobile_phone => "TRIFOLD"
271
+ },
272
+ }
273
+ )
274
+
275
+ result.should_not be_success
276
+ result.errors.for(:merchant_account).for(:individual).on(:first_name).map(&:code).should == [Braintree::ErrorCodes::MerchantAccount::Individual::FirstNameIsInvalid]
277
+ result.errors.for(:merchant_account).for(:individual).on(:last_name).map(&:code).should == [Braintree::ErrorCodes::MerchantAccount::Individual::LastNameIsInvalid]
278
+ result.errors.for(:merchant_account).for(:individual).on(:email).map(&:code).should == [Braintree::ErrorCodes::MerchantAccount::Individual::EmailIsInvalid]
279
+ result.errors.for(:merchant_account).for(:individual).on(:phone).map(&:code).should == [Braintree::ErrorCodes::MerchantAccount::Individual::PhoneIsInvalid]
280
+ result.errors.for(:merchant_account).for(:individual).for(:address).on(:street_address).map(&:code).should == [Braintree::ErrorCodes::MerchantAccount::Individual::Address::StreetAddressIsInvalid]
281
+ result.errors.for(:merchant_account).for(:individual).for(:address).on(:postal_code).map(&:code).should == [Braintree::ErrorCodes::MerchantAccount::Individual::Address::PostalCodeIsInvalid]
282
+ result.errors.for(:merchant_account).for(:individual).for(:address).on(:region).map(&:code).should == [Braintree::ErrorCodes::MerchantAccount::Individual::Address::RegionIsInvalid]
283
+ result.errors.for(:merchant_account).for(:individual).on(:ssn).map(&:code).should == [Braintree::ErrorCodes::MerchantAccount::Individual::SsnIsInvalid]
284
+
285
+ result.errors.for(:merchant_account).for(:business).on(:legal_name).map(&:code).should == [Braintree::ErrorCodes::MerchantAccount::Business::LegalNameIsInvalid]
286
+ result.errors.for(:merchant_account).for(:business).on(:dba_name).map(&:code).should == [Braintree::ErrorCodes::MerchantAccount::Business::DbaNameIsInvalid]
287
+ result.errors.for(:merchant_account).for(:business).on(:tax_id).map(&:code).should == [Braintree::ErrorCodes::MerchantAccount::Business::TaxIdIsInvalid]
288
+ result.errors.for(:merchant_account).for(:business).for(:address).on(:street_address).map(&:code).should == [Braintree::ErrorCodes::MerchantAccount::Business::Address::StreetAddressIsInvalid]
289
+ result.errors.for(:merchant_account).for(:business).for(:address).on(:postal_code).map(&:code).should == [Braintree::ErrorCodes::MerchantAccount::Business::Address::PostalCodeIsInvalid]
290
+ result.errors.for(:merchant_account).for(:business).for(:address).on(:region).map(&:code).should == [Braintree::ErrorCodes::MerchantAccount::Business::Address::RegionIsInvalid]
291
+
292
+ result.errors.for(:merchant_account).for(:funding).on(:destination).map(&:code).should == [Braintree::ErrorCodes::MerchantAccount::Funding::DestinationIsInvalid]
293
+ result.errors.for(:merchant_account).for(:funding).on(:routing_number).map(&:code).should == [Braintree::ErrorCodes::MerchantAccount::Funding::RoutingNumberIsInvalid]
294
+ result.errors.for(:merchant_account).for(:funding).on(:account_number).map(&:code).should == [Braintree::ErrorCodes::MerchantAccount::Funding::AccountNumberIsInvalid]
295
+ result.errors.for(:merchant_account).for(:funding).on(:email).map(&:code).should == [Braintree::ErrorCodes::MerchantAccount::Funding::EmailIsInvalid]
296
+ result.errors.for(:merchant_account).for(:funding).on(:mobile_phone).map(&:code).should == [Braintree::ErrorCodes::MerchantAccount::Funding::MobilePhoneIsInvalid]
297
+
298
+ result.errors.for(:merchant_account).on(:base).should be_empty
299
+ end
300
+
301
+ it "handles validation errors for business fields" do
302
+ result = Braintree::MerchantAccount.update(
303
+ "sandbox_sub_merchant_account", {
304
+ :business => {
305
+ :legal_name => "",
306
+ :tax_id => "111223333",
307
+ },
308
+ }
309
+ )
310
+
311
+ result.should_not be_success
312
+ result.errors.for(:merchant_account).for(:business).on(:legal_name).map(&:code).should == [Braintree::ErrorCodes::MerchantAccount::Business::LegalNameIsRequiredWithTaxId]
313
+ result.errors.for(:merchant_account).for(:business).on(:tax_id).map(&:code).should == [Braintree::ErrorCodes::MerchantAccount::Business::TaxIdMustBeBlank]
314
+
315
+ result = Braintree::MerchantAccount.update(
316
+ "sandbox_sub_merchant_account", {
317
+ :business => {
318
+ :legal_name => "legal_name",
319
+ :tax_id => "",
320
+ },
321
+ }
322
+ )
323
+
324
+ result.should_not be_success
325
+ result.errors.for(:merchant_account).for(:business).on(:tax_id).map(&:code).should == [Braintree::ErrorCodes::MerchantAccount::Business::TaxIdIsRequiredWithLegalName]
326
+ end
327
+
328
+ it "handles validation errors for funding fields" do
329
+ result = Braintree::MerchantAccount.update(
330
+ "sandbox_sub_merchant_account", {
331
+ :funding => {
332
+ :destination => Braintree::MerchantAccount::FundingDestinations::Bank,
333
+ :routing_number => "",
334
+ :account_number => ""
335
+ },
336
+ }
337
+ )
338
+
339
+ result.should_not be_success
340
+ result.errors.for(:merchant_account).for(:funding).on(:routing_number).map(&:code).should == [Braintree::ErrorCodes::MerchantAccount::Funding::RoutingNumberIsRequired]
341
+ result.errors.for(:merchant_account).for(:funding).on(:account_number).map(&:code).should == [Braintree::ErrorCodes::MerchantAccount::Funding::AccountNumberIsRequired]
342
+
343
+ result = Braintree::MerchantAccount.update(
344
+ "sandbox_sub_merchant_account", {
345
+ :funding => {
346
+ :destination => Braintree::MerchantAccount::FundingDestinations::Email,
347
+ :email => ""
348
+ },
349
+ }
350
+ )
351
+
352
+ result.should_not be_success
353
+ result.errors.for(:merchant_account).for(:funding).on(:email).map(&:code).should == [Braintree::ErrorCodes::MerchantAccount::Funding::EmailIsRequired]
354
+
355
+ result = Braintree::MerchantAccount.update(
356
+ "sandbox_sub_merchant_account", {
357
+ :funding => {
358
+ :destination => Braintree::MerchantAccount::FundingDestinations::MobilePhone,
359
+ :mobile_phone => ""
360
+ },
361
+ }
362
+ )
363
+
364
+ result.should_not be_success
365
+ result.errors.for(:merchant_account).for(:funding).on(:mobile_phone).map(&:code).should == [Braintree::ErrorCodes::MerchantAccount::Funding::MobilePhoneIsRequired]
72
366
  end
73
367
  end
74
368
  end
@@ -49,6 +49,30 @@ describe Braintree::TransparentRedirect do
49
49
  transaction.credit_card_details.expiration_date.should == "05/2009"
50
50
  end
51
51
 
52
+ it "allows specifying a service fee" do
53
+ params = {
54
+ :transaction => {
55
+ :amount => Braintree::Test::TransactionAmounts::Authorize,
56
+ :merchant_account_id => SpecHelper::NonDefaultSubMerchantAccountId,
57
+ :credit_card => {
58
+ :number => Braintree::Test::CreditCardNumbers::Visa,
59
+ :expiration_date => "05/2009"
60
+ },
61
+ :service_fee_amount => "1.00"
62
+ }
63
+ }
64
+ tr_data_params = {
65
+ :transaction => {
66
+ :type => "sale"
67
+ }
68
+ }
69
+ tr_data = Braintree::TransparentRedirect.transaction_data({:redirect_url => "http://example.com"}.merge(tr_data_params))
70
+ query_string_response = SpecHelper.simulate_form_post_for_tr(tr_data, params)
71
+ result = Braintree::TransparentRedirect.confirm(query_string_response)
72
+ result.success?.should == true
73
+ result.transaction.service_fee_amount.should == BigDecimal.new("1.00")
74
+ end
75
+
52
76
  it "returns an error when there's an error" do
53
77
  params = {
54
78
  :transaction => {
@@ -21,3 +21,4 @@ describe Braintree::MerchantAccount do
21
21
  end
22
22
  end
23
23
  end
24
+
@@ -102,7 +102,7 @@ describe Braintree::WebhookNotification do
102
102
  notification.merchant_account.master_merchant_account.id.should == "master_ma_for_my_id"
103
103
  notification.merchant_account.master_merchant_account.status.should == Braintree::MerchantAccount::Status::Suspended
104
104
  notification.message.should == "Credit score is too low"
105
- notification.errors.for(:merchant_account).on(:base).first.code.should == Braintree::ErrorCodes::MerchantAccount::ApplicantDetails::DeclinedOFAC
105
+ notification.errors.for(:merchant_account).on(:base).first.code.should == Braintree::ErrorCodes::MerchantAccount::DeclinedOFAC
106
106
  end
107
107
  end
108
108
 
metadata CHANGED
@@ -1,18 +1,20 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: braintree
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.26.0
4
+ version: 2.27.0
5
+ prerelease:
5
6
  platform: ruby
6
7
  authors:
7
8
  - Braintree
8
9
  autorequire:
9
10
  bindir: bin
10
11
  cert_chain: []
11
- date: 2013-10-28 00:00:00.000000000 Z
12
+ date: 2013-12-04 00:00:00.000000000 Z
12
13
  dependencies:
13
14
  - !ruby/object:Gem::Dependency
14
15
  name: builder
15
16
  requirement: !ruby/object:Gem::Requirement
17
+ none: false
16
18
  requirements:
17
19
  - - ! '>='
18
20
  - !ruby/object:Gem::Version
@@ -20,6 +22,7 @@ dependencies:
20
22
  type: :runtime
21
23
  prerelease: false
22
24
  version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
23
26
  requirements:
24
27
  - - ! '>='
25
28
  - !ruby/object:Gem::Version
@@ -33,160 +36,165 @@ files:
33
36
  - README.rdoc
34
37
  - LICENSE
35
38
  - lib/braintree.rb
36
- - lib/braintree/validation_error.rb
37
- - lib/braintree/webhook_testing_gateway.rb
38
- - lib/braintree/transparent_redirect.rb
39
- - lib/braintree/webhook_notification.rb
40
- - lib/braintree/validation_error_collection.rb
41
- - lib/braintree/transaction.rb
42
- - lib/braintree/credit_card_verification_gateway.rb
43
- - lib/braintree/webhook_notification_gateway.rb
44
- - lib/braintree/transaction_search.rb
45
- - lib/braintree/transaction_gateway.rb
46
- - lib/braintree/add_on.rb
47
- - lib/braintree/resource_collection.rb
48
- - lib/braintree/address_gateway.rb
49
- - lib/braintree/successful_result.rb
50
- - lib/braintree/plan.rb
51
- - lib/braintree/subscription_search.rb
52
- - lib/braintree/descriptor.rb
53
- - lib/braintree/error_codes.rb
39
+ - lib/braintree/settlement_batch_summary_gateway.rb
40
+ - lib/braintree/discount.rb
41
+ - lib/braintree/base_module.rb
54
42
  - lib/braintree/xml.rb
55
- - lib/braintree/discount_gateway.rb
56
- - lib/braintree/xml/generator.rb
57
- - lib/braintree/xml/parser.rb
58
- - lib/braintree/xml/rexml.rb
59
- - lib/braintree/xml/libxml.rb
60
- - lib/braintree/version.rb
61
- - lib/braintree/address.rb
62
- - lib/braintree/modification.rb
63
- - lib/braintree/http.rb
64
- - lib/braintree/digest.rb
65
43
  - lib/braintree/customer.rb
44
+ - lib/braintree/validation_error.rb
45
+ - lib/braintree/transaction_gateway.rb
66
46
  - lib/braintree/gateway.rb
67
- - lib/braintree/base_module.rb
68
- - lib/braintree/advanced_search.rb
69
- - lib/braintree/settlement_batch_summary.rb
70
- - lib/braintree/errors.rb
47
+ - lib/braintree/exceptions.rb
71
48
  - lib/braintree/customer_gateway.rb
72
- - lib/braintree/webhook_testing.rb
49
+ - lib/braintree/credit_card_verification.rb
50
+ - lib/braintree/digest.rb
73
51
  - lib/braintree/credit_card.rb
74
- - lib/braintree/settlement_batch_summary_gateway.rb
75
- - lib/braintree/customer_search.rb
76
- - lib/braintree/address/country_names.rb
52
+ - lib/braintree/discount_gateway.rb
53
+ - lib/braintree/subscription.rb
77
54
  - lib/braintree/util.rb
78
- - lib/braintree/subscription_gateway.rb
79
- - lib/braintree/discount.rb
80
- - lib/braintree/credit_card_verification.rb
55
+ - lib/braintree/configuration.rb
56
+ - lib/braintree/merchant_account.rb
81
57
  - lib/braintree/credit_card_gateway.rb
82
- - lib/braintree/credit_card_verification_search.rb
58
+ - lib/braintree/resource_collection.rb
83
59
  - lib/braintree/merchant_account_gateway.rb
84
- - lib/braintree/add_on_gateway.rb
85
- - lib/braintree/settlement_batch.rb
86
- - lib/braintree/transparent_redirect_gateway.rb
87
- - lib/braintree/test/venmo_sdk.rb
88
- - lib/braintree/test/transaction_amounts.rb
60
+ - lib/braintree/address/country_names.rb
61
+ - lib/braintree/credit_card_verification_search.rb
62
+ - lib/braintree/version.rb
63
+ - lib/braintree/plan.rb
64
+ - lib/braintree/error_codes.rb
65
+ - lib/braintree/validation_error_collection.rb
66
+ - lib/braintree/address_gateway.rb
67
+ - lib/braintree/subscription_gateway.rb
68
+ - lib/braintree/webhook_notification_gateway.rb
69
+ - lib/braintree/add_on.rb
89
70
  - lib/braintree/test/credit_card.rb
71
+ - lib/braintree/test/transaction_amounts.rb
72
+ - lib/braintree/test/venmo_sdk.rb
90
73
  - lib/braintree/test/merchant_account.rb
91
- - lib/braintree/merchant_account.rb
92
- - lib/braintree/subscription.rb
74
+ - lib/braintree/xml/rexml.rb
75
+ - lib/braintree/xml/generator.rb
76
+ - lib/braintree/xml/libxml.rb
77
+ - lib/braintree/xml/parser.rb
78
+ - lib/braintree/transparent_redirect.rb
93
79
  - lib/braintree/plan_gateway.rb
94
- - lib/braintree/exceptions.rb
80
+ - lib/braintree/transaction_search.rb
81
+ - lib/braintree/customer_search.rb
82
+ - lib/braintree/transparent_redirect_gateway.rb
83
+ - lib/braintree/webhook_notification.rb
84
+ - lib/braintree/webhook_testing_gateway.rb
85
+ - lib/braintree/webhook_testing.rb
86
+ - lib/braintree/credit_card_verification_gateway.rb
87
+ - lib/braintree/descriptor.rb
88
+ - lib/braintree/modification.rb
89
+ - lib/braintree/transaction.rb
90
+ - lib/braintree/merchant_account/individual_details.rb
91
+ - lib/braintree/merchant_account/address_details.rb
92
+ - lib/braintree/merchant_account/funding_details.rb
93
+ - lib/braintree/merchant_account/business_details.rb
94
+ - lib/braintree/add_on_gateway.rb
95
+ - lib/braintree/successful_result.rb
96
+ - lib/braintree/advanced_search.rb
97
+ - lib/braintree/subscription_search.rb
95
98
  - lib/braintree/error_result.rb
96
- - lib/braintree/configuration.rb
97
- - lib/braintree/transaction/subscription_details.rb
98
- - lib/braintree/transaction/address_details.rb
99
+ - lib/braintree/settlement_batch_summary.rb
100
+ - lib/braintree/address.rb
101
+ - lib/braintree/settlement_batch.rb
102
+ - lib/braintree/transaction/disbursement_details.rb
99
103
  - lib/braintree/transaction/status_details.rb
104
+ - lib/braintree/transaction/address_details.rb
105
+ - lib/braintree/transaction/subscription_details.rb
100
106
  - lib/braintree/transaction/customer_details.rb
101
107
  - lib/braintree/transaction/credit_card_details.rb
102
- - lib/braintree/transaction/disbursement_details.rb
103
- - lib/ssl/www_braintreegateway_com.ca.crt
104
- - lib/ssl/securetrust_ca.crt
108
+ - lib/braintree/errors.rb
109
+ - lib/braintree/http.rb
105
110
  - lib/ssl/api_braintreegateway_com.ca.crt
111
+ - lib/ssl/securetrust_ca.crt
112
+ - lib/ssl/www_braintreegateway_com.ca.crt
106
113
  - lib/ssl/sandbox_braintreegateway_com.ca.crt
107
- - spec/integration/spec_helper.rb
108
- - spec/integration/braintree/error_codes_spec.rb
109
- - spec/integration/braintree/transparent_redirect_spec.rb
110
- - spec/integration/braintree/credit_card_verification_search_spec.rb
111
- - spec/integration/braintree/advanced_search_spec.rb
112
- - spec/integration/braintree/discount_spec.rb
113
- - spec/integration/braintree/credit_card_spec.rb
114
- - spec/integration/braintree/settlement_batch_summary_spec.rb
115
- - spec/integration/braintree/address_spec.rb
116
- - spec/integration/braintree/customer_search_spec.rb
117
- - spec/integration/braintree/credit_card_verification_spec.rb
118
- - spec/integration/braintree/plan_spec.rb
119
- - spec/integration/braintree/http_spec.rb
120
- - spec/integration/braintree/customer_spec.rb
121
- - spec/integration/braintree/add_on_spec.rb
122
- - spec/integration/braintree/transaction_spec.rb
123
- - spec/integration/braintree/transaction_search_spec.rb
124
- - spec/integration/braintree/subscription_spec.rb
125
- - spec/integration/braintree/test/transaction_amounts_spec.rb
126
- - spec/integration/braintree/merchant_account_spec.rb
127
- - spec/spec_helper.rb
114
+ - spec/spec.opts
115
+ - spec/ssl/privateKey.key
128
116
  - spec/ssl/certificate.crt
129
117
  - spec/ssl/geotrust_global.crt
130
- - spec/ssl/privateKey.key
131
- - spec/httpsd.pid
118
+ - spec/hacks/tcp_socket.rb
119
+ - spec/script/httpsd.rb
132
120
  - spec/unit/braintree_spec.rb
133
- - spec/unit/spec_helper.rb
134
- - spec/unit/braintree/transparent_redirect_spec.rb
135
- - spec/unit/braintree/credit_card_verification_search_spec.rb
136
- - spec/unit/braintree/base_module_spec.rb
137
121
  - spec/unit/braintree/credit_card_spec.rb
138
- - spec/unit/braintree/xml_spec.rb
139
- - spec/unit/braintree/address_spec.rb
140
- - spec/unit/braintree/validation_error_collection_spec.rb
122
+ - spec/unit/braintree/errors_spec.rb
123
+ - spec/unit/braintree/subscription_search_spec.rb
141
124
  - spec/unit/braintree/util_spec.rb
125
+ - spec/unit/braintree/address_spec.rb
126
+ - spec/unit/braintree/subscription_spec.rb
127
+ - spec/unit/braintree/webhook_notification_spec.rb
128
+ - spec/unit/braintree/transparent_redirect_spec.rb
129
+ - spec/unit/braintree/resource_collection_spec.rb
130
+ - spec/unit/braintree/http_spec.rb
131
+ - spec/unit/braintree/merchant_account_spec.rb
132
+ - spec/unit/braintree/customer_spec.rb
142
133
  - spec/unit/braintree/error_result_spec.rb
134
+ - spec/unit/braintree/successful_result_spec.rb
143
135
  - spec/unit/braintree/credit_card_verification_spec.rb
144
- - spec/unit/braintree/xml/rexml_spec.rb
136
+ - spec/unit/braintree/validation_error_spec.rb
145
137
  - spec/unit/braintree/xml/parser_spec.rb
138
+ - spec/unit/braintree/xml/rexml_spec.rb
146
139
  - spec/unit/braintree/xml/libxml_spec.rb
140
+ - spec/unit/braintree/credit_card_verification_search_spec.rb
141
+ - spec/unit/braintree/base_module_spec.rb
142
+ - spec/unit/braintree/transaction_spec.rb
147
143
  - spec/unit/braintree/configuration_spec.rb
148
- - spec/unit/braintree/errors_spec.rb
149
- - spec/unit/braintree/digest_spec.rb
150
- - spec/unit/braintree/validation_error_spec.rb
151
- - spec/unit/braintree/webhook_notification_spec.rb
152
- - spec/unit/braintree/subscription_search_spec.rb
153
- - spec/unit/braintree/http_spec.rb
154
- - spec/unit/braintree/customer_spec.rb
144
+ - spec/unit/braintree/xml_spec.rb
145
+ - spec/unit/braintree/validation_error_collection_spec.rb
155
146
  - spec/unit/braintree/modification_spec.rb
156
- - spec/unit/braintree/transaction_spec.rb
157
- - spec/unit/braintree/resource_collection_spec.rb
158
- - spec/unit/braintree/successful_result_spec.rb
159
- - spec/unit/braintree/transaction_search_spec.rb
160
- - spec/unit/braintree/subscription_spec.rb
161
- - spec/unit/braintree/merchant_account_spec.rb
162
- - spec/unit/braintree/transaction/deposit_details_spec.rb
147
+ - spec/unit/braintree/digest_spec.rb
163
148
  - spec/unit/braintree/transaction/customer_details_spec.rb
149
+ - spec/unit/braintree/transaction/deposit_details_spec.rb
164
150
  - spec/unit/braintree/transaction/credit_card_details_spec.rb
165
- - spec/spec.opts
166
- - spec/hacks/tcp_socket.rb
167
- - spec/script/httpsd.rb
151
+ - spec/unit/braintree/transaction_search_spec.rb
152
+ - spec/unit/spec_helper.rb
153
+ - spec/httpsd.pid
154
+ - spec/integration/braintree/credit_card_spec.rb
155
+ - spec/integration/braintree/add_on_spec.rb
156
+ - spec/integration/braintree/plan_spec.rb
157
+ - spec/integration/braintree/advanced_search_spec.rb
158
+ - spec/integration/braintree/error_codes_spec.rb
159
+ - spec/integration/braintree/address_spec.rb
160
+ - spec/integration/braintree/subscription_spec.rb
161
+ - spec/integration/braintree/transparent_redirect_spec.rb
162
+ - spec/integration/braintree/http_spec.rb
163
+ - spec/integration/braintree/merchant_account_spec.rb
164
+ - spec/integration/braintree/customer_spec.rb
165
+ - spec/integration/braintree/credit_card_verification_spec.rb
166
+ - spec/integration/braintree/test/transaction_amounts_spec.rb
167
+ - spec/integration/braintree/settlement_batch_summary_spec.rb
168
+ - spec/integration/braintree/credit_card_verification_search_spec.rb
169
+ - spec/integration/braintree/transaction_spec.rb
170
+ - spec/integration/braintree/customer_search_spec.rb
171
+ - spec/integration/braintree/discount_spec.rb
172
+ - spec/integration/braintree/transaction_search_spec.rb
173
+ - spec/integration/spec_helper.rb
174
+ - spec/spec_helper.rb
168
175
  - braintree.gemspec
169
176
  homepage: http://www.braintreepayments.com/
170
177
  licenses: []
171
- metadata: {}
172
178
  post_install_message:
173
179
  rdoc_options: []
174
180
  require_paths:
175
181
  - lib
176
182
  required_ruby_version: !ruby/object:Gem::Requirement
183
+ none: false
177
184
  requirements:
178
185
  - - ! '>='
179
186
  - !ruby/object:Gem::Version
180
187
  version: '0'
181
188
  required_rubygems_version: !ruby/object:Gem::Requirement
189
+ none: false
182
190
  requirements:
183
191
  - - ! '>='
184
192
  - !ruby/object:Gem::Version
185
193
  version: '0'
186
194
  requirements: []
187
195
  rubyforge_project: braintree
188
- rubygems_version: 2.0.6
196
+ rubygems_version: 1.8.24
189
197
  signing_key:
190
- specification_version: 4
198
+ specification_version: 3
191
199
  summary: Braintree Gateway Ruby Client Library
192
200
  test_files: []
checksums.yaml DELETED
@@ -1,15 +0,0 @@
1
- ---
2
- !binary "U0hBMQ==":
3
- metadata.gz: !binary |-
4
- MDE4OTA4ZjI2YTY1YzEzMDFmZDg0Yzg3MjU0NmNkZDU2MTg4MDEyYQ==
5
- data.tar.gz: !binary |-
6
- NWRjMTBlNzk2ZjUxMTY2OGNiMTgyZjBiNzJlNmQwNzFiOTYzZTFhMQ==
7
- !binary "U0hBNTEy":
8
- metadata.gz: !binary |-
9
- NThlNjAzYmNkNDRlMDE5ZDhlMjNhYTdlYjBiMTkyNTVmNWRhNmQ3OGI5MTRk
10
- MzU1YWMyMmI3ZjgzZGFjYzI3OTIyZWUxMzJhMjc5ODAzMjc3NDkzNWExNWM0
11
- NzA5Y2ZkZGVkYTYxMTM1YjVkOTVlYzgzNmFhNDAzNWQ4MzNmY2Q=
12
- data.tar.gz: !binary |-
13
- MTlkMWMzMjIzZTQ4ZGFhZTRiODgwMDQxYTlkYzhlZGZhNGEyMTk1MjM5Y2Uz
14
- MjkxMWY2NzViZjZlOTJmNDQyZDA3OGQ3ZmIxZGUzMmZkZGE5Mjk5Y2E5Mjhk
15
- YWE2OWFlMzlmYTQwMDAzZjMwODcxNjVmZTBkZTBjZmYwMGRlN2M=