lib/active_merchant/billing/check.rb in activemerchant-1.43.3 vs lib/active_merchant/billing/check.rb in activemerchant-1.44.0

- old
+ new

@@ -3,45 +3,49 @@ # 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. - class Check - include Validateable - + class Check < Model attr_accessor :first_name, :last_name, :bank_name, :routing_number, :account_number, :account_holder_type, :account_type, :number # Used for Canadian bank accounts attr_accessor :institution_number, :transit_number def name - @name ||= "#{@first_name} #{@last_name}".strip + @name ||= "#{first_name} #{last_name}".strip end def name=(value) - return if value.blank? + return if empty?(value) @name = value segments = value.split(' ') @last_name = segments.pop @first_name = segments.join(' ') end def validate + errors = [] + [:name, :routing_number, :account_number].each do |attr| - errors.add(attr, "cannot be empty") if self.send(attr).blank? + errors << [attr, "cannot be empty"] if empty?(self.send(attr)) end - errors.add(:routing_number, "is invalid") unless valid_routing_number? + errors << [:routing_number, "is invalid"] unless valid_routing_number? - errors.add(:account_holder_type, "must be personal or business") if - !account_holder_type.blank? && !%w[business personal].include?(account_holder_type.to_s) + if(!empty?(account_holder_type) && !%w[business personal].include?(account_holder_type.to_s)) + errors << [:account_holder_type, "must be personal or business"] + end - errors.add(:account_type, "must be checking or savings") if - !account_type.blank? && !%w[checking savings].include?(account_type.to_s) + if(!empty?(account_type) && !%w[checking savings].include?(account_type.to_s)) + errors << [:account_type, "must be checking or savings"] + end + + errors_hash(errors) end def type 'check' end @@ -49,20 +53,23 @@ # 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 http://en.wikipedia.org/wiki/Routing_transit_number#Internal_checksums 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 + digits = routing_number.to_s.split('').map(&:to_i).select{|d| (0..9).include?(d)} + case digits.size + when 9 + checksum = ((3 * (digits[0] + digits[3] + digits[6])) + + (7 * (digits[1] + digits[4] + digits[7])) + + (digits[2] + digits[5] + digits[8])) % 10 + case checksum + when 0 + true + else + false + end + else + false end end end end end