Class: BraintreeRails::TransactionValidator

Inherits:
Validator
  • Object
show all
Defined in:
lib/braintree_rails/transaction_validator.rb

Constant Summary collapse

Validations =
[:amount, :presence => true, :numericality => {:greater_than_or_equal_to => 0}, :if => :new_record?],
[:type, :presence => true, :inclusion => {:in => %w(sale credit)}, :if => :new_record?],
[:status, :inclusion => {:in => [Braintree::Transaction::Status::Authorized]}, :on => :submit_for_settlement],
[:status, :inclusion => {:in => [Braintree::Transaction::Status::Settled, Braintree::Transaction::Status::Settling]}, :on => :refund],
[:status, :inclusion => {:in => [Braintree::Transaction::Status::Authorized, Braintree::Transaction::Status::SubmittedForSettlement]}, :on => :void]

Instance Method Summary collapse

Methods inherited from Validator

collect_validations, default_validations, model_class, reset_validations, set_validations, setup, #validate_association

Constructor Details

#initializeTransactionValidator

Returns a new instance of TransactionValidator.



11
12
13
14
15
16
# File 'lib/braintree_rails/transaction_validator.rb', line 11

def initialize(*)
  self.class.model_class.class_eval do
    define_model_callbacks :submit_for_settlement, :refund, :void
  end
  super
end

Instance Method Details

#must_have_credit_card(transaction) ⇒ Object



22
23
24
25
26
27
28
# File 'lib/braintree_rails/transaction_validator.rb', line 22

def must_have_credit_card(transaction)
  if transaction.credit_card.blank?
    validate_customer_have_default_credit_card(transaction)
  elsif transaction.credit_card.new_record?
    validate_new_credit_card(transaction)
  end
end

#validate(transaction) ⇒ Object



18
19
20
# File 'lib/braintree_rails/transaction_validator.rb', line 18

def validate(transaction)
  must_have_credit_card(transaction) if transaction.new_record?
end

#validate_customer_have_default_credit_card(transaction) ⇒ Object



30
31
32
33
34
35
36
# File 'lib/braintree_rails/transaction_validator.rb', line 30

def validate_customer_have_default_credit_card(transaction)
  if transaction.customer.blank?
    transaction.errors.add(:base, "Either customer or credit card is required")
  elsif transaction.customer.default_credit_card.blank?
    transaction.errors.add(:base, "Customer does not have a default credit card")
  end
end

#validate_new_credit_card(transaction) ⇒ Object



38
39
40
41
# File 'lib/braintree_rails/transaction_validator.rb', line 38

def validate_new_credit_card(transaction)
  transaction.credit_card.billing_address = transaction.billing
  validate_association(transaction, :credit_card)
end