Skip to content

Commit

Permalink
2.27.0
Browse files Browse the repository at this point in the history
  • Loading branch information
braintreeps committed Dec 4, 2013
1 parent 80647ff commit a1babb9
Show file tree
Hide file tree
Showing 14 changed files with 531 additions and 25 deletions.
4 changes: 4 additions & 0 deletions CHANGELOG.rdoc
@@ -1,3 +1,7 @@
== 2.27.0
* Merchant account update API
* Merchant account create API v2

== 2.26.0
* Official support for Partnerships
* Changed visibility of methods used in multi-tenancy
Expand Down
4 changes: 4 additions & 0 deletions lib/braintree.rb
Expand Up @@ -46,6 +46,10 @@
require "braintree/http"
require "braintree/merchant_account"
require "braintree/merchant_account_gateway"
require "braintree/merchant_account/individual_details"
require "braintree/merchant_account/business_details"
require "braintree/merchant_account/funding_details"
require "braintree/merchant_account/address_details"
require "braintree/plan"
require "braintree/plan_gateway"
require "braintree/settlement_batch_summary"
Expand Down
76 changes: 70 additions & 6 deletions lib/braintree/error_codes.rb
Expand Up @@ -243,6 +243,15 @@ module MerchantAccount
MasterMerchantAccountIdIsInvalid = "82607"
MasterMerchantAccountMustBeActive = "82608"
TosAcceptedIsRequired = "82610"
IdCannotBeUpdated = "82675"
MasterMerchantAccountIdCannotBeUpdated = "82676"
CannotBeUpdated = "82674"
DeclinedOFAC = "82621"
DeclinedMasterCardMatch = "82622"
DeclinedFailedKYC = "82623"
DeclinedSsnInvalid = "82624"
DeclinedSsnMatchesDeceased = "82625"
Declined = "82626"

module ApplicantDetails
FirstNameIsRequired = "82609"
Expand All @@ -259,13 +268,17 @@ module ApplicantDetails
CompanyNameIsRequiredWithTaxId = "82633"
TaxIdIsRequiredWithCompanyName = "82634"
RoutingNumberIsInvalid = "82635"
DeclinedOFAC = "82621"
DeclinedMasterCardMatch = "82622"
DeclinedFailedKYC = "82623"
DeclinedSsnInvalid = "82624"
DeclinedSsnMatchesDeceased = "82625"
Declined = "82626"
DeclinedOFAC = "82621" # Keep for backwards compatibility
DeclinedMasterCardMatch = "82622" # Keep for backwards compatibility
DeclinedFailedKYC = "82623" # Keep for backwards compatibility
DeclinedSsnInvalid = "82624" # Keep for backwards compatibility
DeclinedSsnMatchesDeceased = "82625" # Keep for backwards compatibility
Declined = "82626" # Keep for backwards compatibility
PhoneIsInvalid = "82636"
DateOfBirthIsInvalid = "82663"
AccountNumberIsInvalid = "82670"
EmailAddressIsRequired = "82665"
TaxIdMustBeBlank = "82673"

module Address
StreetAddressIsRequired = "82617"
Expand All @@ -274,8 +287,59 @@ module Address
RegionIsRequired = "82620"
StreetAddressIsInvalid = "82629"
PostalCodeIsInvalid = "82630"
RegionIsInvalid = "82664"
end
end

module Individual
FirstNameIsRequired = "82637"
LastNameIsRequired = "82638"
DateOfBirthIsRequired = "82639"
SsnIsInvalid = "82642"
EmailIsInvalid = "82643"
FirstNameIsInvalid = "82644"
LastNameIsInvalid = "82645"
PhoneIsInvalid = "82656"
DateOfBirthIsInvalid = "82666"
EmailIsRequired = "82667"

module Address
StreetAddressIsRequired = "82657"
LocalityIsRequired = "82658"
PostalCodeIsRequired = "82659"
RegionIsRequired = "82660"
StreetAddressIsInvalid = "82661"
PostalCodeIsInvalid = "82662"
RegionIsInvalid = "82668"
end
end

module Business
DbaNameIsInvalid = "82646"
LegalNameIsInvalid = "82677"
LegalNameIsRequiredWithTaxId = "82669"
TaxIdIsInvalid = "82647"
TaxIdIsRequiredWithLegalName = "82648"
TaxIdMustBeBlank = "82672"
module Address
StreetAddressIsInvalid = "82685"
PostalCodeIsInvalid = "82686"
RegionIsInvalid = "82684"
end
end

module Funding
AccountNumberIsInvalid = "82671"
AccountNumberIsRequired = "82641"
DestinationIsInvalid = "82679"
DestinationIsRequired = "82678"
EmailIsInvalid = "82681"
EmailIsRequired = "82680"
MobilePhoneIsInvalid = "82683"
MobilePhoneIsRequired = "82682"
RoutingNumberIsInvalid = "82649"
RoutingNumberIsRequired = "82640"
end
end

module SettlementBatchSummary
Expand Down
18 changes: 16 additions & 2 deletions lib/braintree/merchant_account.rb
Expand Up @@ -8,16 +8,30 @@ module Status
Suspended = "suspended"
end

attr_reader :status, :id, :master_merchant_account
module FundingDestinations
Bank = "bank"
MobilePhone = "mobile_phone"
Email = "email"
end

attr_reader :status, :id, :master_merchant_account,
:individual_details, :business_details, :funding_details

def self.create(attributes)
Configuration.gateway.merchant_account.create(attributes)
end

def self.update(id, attributes)
Configuration.gateway.merchant_account.update(id, attributes)
end

def initialize(gateway, attributes) # :nodoc
@gateway = gateway
@master_merchant_account = MerchantAccount._new(@gateway, attributes.delete(:master_merchant_account)) if attributes[:master_merchant_account]
set_instance_variables_from_hash(attributes)
@individual_details = IndividualDetails.new(@individual)
@business_details = BusinessDetails.new(@business)
@funding_details = FundingDetails.new(@funding)
@master_merchant_account = MerchantAccount._new(@gateway, attributes.delete(:master_merchant_account)) if attributes[:master_merchant_account]
end

class << self
Expand Down
13 changes: 13 additions & 0 deletions lib/braintree/merchant_account/address_details.rb
@@ -0,0 +1,13 @@
module Braintree
class MerchantAccount
class AddressDetails
include BaseModule

attr_reader :street_address, :locality, :region, :postal_code

def initialize(attributes)
set_instance_variables_from_hash attributes unless attributes.nil?
end
end
end
end
14 changes: 14 additions & 0 deletions lib/braintree/merchant_account/business_details.rb
@@ -0,0 +1,14 @@
module Braintree
class MerchantAccount
class BusinessDetails
include BaseModule

attr_reader :dba_name, :legal_name, :tax_id, :address_details

def initialize(attributes)
set_instance_variables_from_hash attributes unless attributes.nil?
@address_details = MerchantAccount::AddressDetails.new(@address)
end
end
end
end
13 changes: 13 additions & 0 deletions lib/braintree/merchant_account/funding_details.rb
@@ -0,0 +1,13 @@
module Braintree
class MerchantAccount
class FundingDetails
include BaseModule

attr_reader :account_number_last_4, :destination, :email, :mobile_phone, :routing_number

def initialize(attributes)
set_instance_variables_from_hash attributes unless attributes.nil?
end
end
end
end
15 changes: 15 additions & 0 deletions lib/braintree/merchant_account/individual_details.rb
@@ -0,0 +1,15 @@
module Braintree
class MerchantAccount
class IndividualDetails
include BaseModule

attr_reader :first_name, :last_name, :email, :phone, :date_of_birth, :ssn_last_4,
:address_details

def initialize(attributes)
set_instance_variables_from_hash attributes unless attributes.nil?
@address_details = MerchantAccount::AddressDetails.new(@address)
end
end
end
end
50 changes: 48 additions & 2 deletions lib/braintree/merchant_account_gateway.rb
Expand Up @@ -6,10 +6,16 @@ def initialize(gateway)
end

def create(attributes)
Util.verify_keys(MerchantAccountGateway._create_signature, attributes)
signature = MerchantAccountGateway._detect_signature(attributes)
Util.verify_keys(signature, attributes)
_do_create "/merchant_accounts/create_via_api", :merchant_account => attributes
end

def update(merchant_account_id, attributes)
Util.verify_keys(MerchantAccountGateway._update_signature, attributes)
_do_update "/merchant_accounts/#{merchant_account_id}/update_via_api", :merchant_account => attributes
end

def _do_create(url, params=nil) # :nodoc:
response = @config.http.post url, params
if response[:api_error_response]
Expand All @@ -19,7 +25,25 @@ def _do_create(url, params=nil) # :nodoc:
end
end

def self._create_signature # :nodoc:
def _do_update(url, params=nil) # :nodoc:
response = @config.http.put(url, params)
if response[:api_error_response]
ErrorResult.new(@gateway, response[:api_error_response])
else
SuccessfulResult.new(:merchant_account => MerchantAccount._new(@gateway, response[:merchant_account]))
end
end

def self._detect_signature(attributes)
if attributes.has_key?(:applicant_details)
warn "[DEPRECATED] Passing :applicant_details to create is deprecated. Please use :individual, :business, and :funding."
MerchantAccountGateway._deprecated_create_signature
else
MerchantAccountGateway._create_signature
end
end

def self._deprecated_create_signature # :nodoc:
[
{:applicant_details => [
:first_name, :last_name, :email, :date_of_birth, :ssn, :routing_number,
Expand All @@ -29,5 +53,27 @@ def self._create_signature # :nodoc:
:tos_accepted, :master_merchant_account_id, :id
]
end

def self._signature # :nodoc:
[
{:individual => [
:first_name, :last_name, :email, :date_of_birth, :ssn, :phone,
{:address => [:street_address, :locality, :region, :postal_code]}]
},
{:business => [
:dba_name, :legal_name, :tax_id,
{:address => [:street_address, :locality, :region, :postal_code]}]
},
{:funding => [:destination, :email, :mobile_phone, :routing_number, :account_number]}
]
end

def self._create_signature # :nodoc:
_signature + [:tos_accepted, :master_merchant_account_id, :id]
end

def self._update_signature # :nodoc:
_signature
end
end
end
2 changes: 1 addition & 1 deletion lib/braintree/version.rb
@@ -1,7 +1,7 @@
module Braintree
module Version
Major = 2
Minor = 26
Minor = 27
Tiny = 0

String = "#{Major}.#{Minor}.#{Tiny}"
Expand Down

0 comments on commit a1babb9

Please sign in to comment.