Class: ActiveMerchant::Billing::Check

Inherits:
Object
  • Object
show all
Includes:
Validateable
Defined in:
lib/active_merchant/billing/check.rb

Overview

The Check object is a plain old Ruby object, similar to CreditCard. It supports validation of necessary attributes such as checkholder’s name, routing and account numbers, but it is not backed by any database.

You may use Check in place of CreditCard with any gateway that supports it.

Instance Attribute Summary collapse

Instance Method Summary collapse

Instance Attribute Details

#account_holder_typeObject

Returns the value of attribute account_holder_type.



11
12
13
# File 'lib/active_merchant/billing/check.rb', line 11

def 
  @account_holder_type
end

#account_numberObject

Returns the value of attribute account_number.



11
12
13
# File 'lib/active_merchant/billing/check.rb', line 11

def 
  @account_number
end

#account_typeObject

Returns the value of attribute account_type.



11
12
13
# File 'lib/active_merchant/billing/check.rb', line 11

def 
  @account_type
end

#bank_nameObject

Returns the value of attribute bank_name.



11
12
13
# File 'lib/active_merchant/billing/check.rb', line 11

def bank_name
  @bank_name
end

#first_nameObject

Returns the value of attribute first_name.



11
12
13
# File 'lib/active_merchant/billing/check.rb', line 11

def first_name
  @first_name
end

#institution_numberObject

Used for Canadian bank accounts



16
17
18
# File 'lib/active_merchant/billing/check.rb', line 16

def institution_number
  @institution_number
end

#last_nameObject

Returns the value of attribute last_name.



11
12
13
# File 'lib/active_merchant/billing/check.rb', line 11

def last_name
  @last_name
end

#numberObject

Returns the value of attribute number.



11
12
13
# File 'lib/active_merchant/billing/check.rb', line 11

def number
  @number
end

#routing_numberObject

Returns the value of attribute routing_number.



11
12
13
# File 'lib/active_merchant/billing/check.rb', line 11

def routing_number
  @routing_number
end

#transit_numberObject

Used for Canadian bank accounts



16
17
18
# File 'lib/active_merchant/billing/check.rb', line 16

def transit_number
  @transit_number
end

Instance Method Details

#nameObject



18
19
20
# File 'lib/active_merchant/billing/check.rb', line 18

def name
  @name ||= "#{@first_name} #{@last_name}".strip
end

#name=(value) ⇒ Object



22
23
24
25
26
27
28
29
# File 'lib/active_merchant/billing/check.rb', line 22

def name=(value)
  return if value.blank?

  @name = value
  segments = value.split(' ')
  @last_name = segments.pop
  @first_name = segments.join(' ')
end

#typeObject



45
46
47
# File 'lib/active_merchant/billing/check.rb', line 45

def type
  'check'
end

#valid_routing_number?Boolean

Routing numbers may be validated by calculating a checksum and dividing it by 10. The formula is:

(3(d1 + d4 + d7) + 7(d2 + d5 + d8) + 1(d3 + d6 + d9))mod 10 = 0

See en.wikipedia.org/wiki/Routing_transit_number#Internal_checksums

Returns:

  • (Boolean)


53
54
55
56
57
58
59
60
61
62
63
64
65
66
# File 'lib/active_merchant/billing/check.rb', line 53

def valid_routing_number?
  d = routing_number.to_s.split('').map(&:to_i).select { |d| (0..9).include?(d) }
  case d.size
    when 9 then
      checksum = ((3 * (d[0] + d[3] + d[6])) +
                  (7 * (d[1] + d[4] + d[7])) +
                       (d[2] + d[5] + d[8])) % 10
      case checksum
        when 0 then true
        else        false
      end
    else false
  end
end

#validateObject



31
32
33
34
35
36
37
38
39
40
41
42
43
# File 'lib/active_merchant/billing/check.rb', line 31

def validate
  [:name, :routing_number, :account_number].each do |attr|
    errors.add(attr, "cannot be empty") if self.send(attr).blank?
  end

  errors.add(:routing_number, "is invalid") unless valid_routing_number?

  errors.add(:account_holder_type, "must be personal or business") if
      !.blank? && !%w[business personal].include?(.to_s)

  errors.add(:account_type, "must be checking or savings") if
      !.blank? && !%w[checking savings].include?(.to_s)
end