Class: MerbMerchant::Billing::Check

Inherits:
Object
  • Object
show all
Includes:
Validateable
Defined in:
lib/merb_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. Currently, only BrainTreeGateway supports the Check object.

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods included from Validateable

#errors, #initialize, #valid?

Instance Attribute Details

#account_holder_typeObject

Returns the value of attribute account_holder_type.



12
13
14
# File 'lib/merb_merchant/billing/check.rb', line 12

def 
  @account_holder_type
end

#account_numberObject

Returns the value of attribute account_number.



12
13
14
# File 'lib/merb_merchant/billing/check.rb', line 12

def 
  @account_number
end

#account_typeObject

Returns the value of attribute account_type.



12
13
14
# File 'lib/merb_merchant/billing/check.rb', line 12

def 
  @account_type
end

#first_nameObject

Returns the value of attribute first_name.



12
13
14
# File 'lib/merb_merchant/billing/check.rb', line 12

def first_name
  @first_name
end

#institution_numberObject

Used for Canadian bank accounts



15
16
17
# File 'lib/merb_merchant/billing/check.rb', line 15

def institution_number
  @institution_number
end

#last_nameObject

Returns the value of attribute last_name.



12
13
14
# File 'lib/merb_merchant/billing/check.rb', line 12

def last_name
  @last_name
end

#numberObject

Returns the value of attribute number.



12
13
14
# File 'lib/merb_merchant/billing/check.rb', line 12

def number
  @number
end

#routing_numberObject

Returns the value of attribute routing_number.



12
13
14
# File 'lib/merb_merchant/billing/check.rb', line 12

def routing_number
  @routing_number
end

#transit_numberObject

Used for Canadian bank accounts



15
16
17
# File 'lib/merb_merchant/billing/check.rb', line 15

def transit_number
  @transit_number
end

Instance Method Details

#nameObject



17
18
19
# File 'lib/merb_merchant/billing/check.rb', line 17

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

#name=(value) ⇒ Object



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

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

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

#typeObject



44
45
46
# File 'lib/merb_merchant/billing/check.rb', line 44

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)


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

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



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

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