Class: Nacha::AbaNumber
- Inherits:
-
Object
- Object
- Nacha::AbaNumber
- Includes:
- HasErrors
- Defined in:
- lib/nacha/aba_number.rb
Overview
Validates and formats an ABA routing number.
Instance Attribute Summary collapse
-
#routing_number ⇒ Object
Returns the value of attribute routing_number.
Attributes included from HasErrors
Instance Method Summary collapse
- #add_check_digit ⇒ Object
- #check_digit ⇒ Object
-
#compute_check_digit ⇒ Object
:reek:FeatureEnvy.
-
#initialize(routing_number) ⇒ AbaNumber
constructor
A new instance of AbaNumber.
- #to_s ⇒ Object
- #to_s_base ⇒ Object
- #valid? ⇒ Boolean
- #valid_check_digit? ⇒ Boolean
- #valid_routing_number_length? ⇒ Boolean
Methods included from HasErrors
Constructor Details
#initialize(routing_number) ⇒ AbaNumber
Returns a new instance of AbaNumber.
11 12 13 14 15 |
# File 'lib/nacha/aba_number.rb', line 11 def initialize(routing_number) @errors = [] @valid = nil @routing_number = routing_number.to_s.strip end |
Instance Attribute Details
#routing_number ⇒ Object
Returns the value of attribute routing_number.
7 8 9 |
# File 'lib/nacha/aba_number.rb', line 7 def routing_number @routing_number end |
Instance Method Details
#add_check_digit ⇒ Object
34 35 36 |
# File 'lib/nacha/aba_number.rb', line 34 def add_check_digit @routing_number = @routing_number[0..7] + compute_check_digit end |
#check_digit ⇒ Object
38 39 40 41 42 43 |
# File 'lib/nacha/aba_number.rb', line 38 def check_digit check = @routing_number[8] return unless @routing_number.length == 9 && compute_check_digit == check check end |
#compute_check_digit ⇒ Object
:reek:FeatureEnvy
18 19 20 21 22 23 24 25 26 |
# File 'lib/nacha/aba_number.rb', line 18 def compute_check_digit digit_array = @routing_number.ljust(8, '0').chars.collect(&:to_i) sum = (3 * (digit_array[0] + digit_array[3] + digit_array[6])) + (7 * (digit_array[1] + digit_array[4] + digit_array[7])) + (digit_array[2] + digit_array[5]) intermediate = (sum % 10) intermediate.zero? ? '0' : (10 - intermediate).to_s end |
#to_s ⇒ Object
80 81 82 |
# File 'lib/nacha/aba_number.rb', line 80 def to_s @routing_number end |
#to_s_base ⇒ Object
84 85 86 |
# File 'lib/nacha/aba_number.rb', line 84 def to_s_base @routing_number[0..7] end |
#valid? ⇒ Boolean
45 46 47 48 49 50 51 52 53 54 55 |
# File 'lib/nacha/aba_number.rb', line 45 def valid? @valid ||= if valid_routing_number_length? if @routing_number.length == 9 valid_check_digit? else # 8 digits is valid true end else false end end |
#valid_check_digit? ⇒ Boolean
69 70 71 72 73 74 75 76 77 78 |
# File 'lib/nacha/aba_number.rb', line 69 def valid_check_digit? check = @routing_number[8] if compute_check_digit != check add_error("Incorrect Check Digit \"#{check}\" should be " \ "\"#{compute_check_digit}\"") false else true end end |
#valid_routing_number_length? ⇒ Boolean
57 58 59 60 61 62 63 64 65 66 67 |
# File 'lib/nacha/aba_number.rb', line 57 def valid_routing_number_length? actual_length = @routing_number.length if [9, 10].include?(actual_length) true else add_error("Routing number must be 8 or 9 digits long, but was " \ "#{actual_length} digits long.") false end end |