Class: DigitChecksum::BaseDocument
- Inherits:
-
Object
- Object
- DigitChecksum::BaseDocument
show all
- Extended by:
- Helpers
- Defined in:
- lib/digit_checksum.rb,
lib/digit_checksum/delegators.rb,
lib/digit_checksum/base_document.rb
Constant Summary
collapse
- CLASS_METHODS_DELEGATES =
[
:valid?,
:invalid?,
:pretty,
:strip,
:normalize,
:as_array,
:formatted,
:clear,
:remove_verify_digits!,
:append_verify_digits!,
:calculate_verify_digits,
:valid_length?
]
- CLASS_METHODS =
[
:verify_digits_positions,
:digits_ignore_positions,
:verify_digits_weights,
:clear_number_regexp,
:root_digits_count,
:pretty_format_mask,
:generator_numbers,
:division_modulo,
:document_length,
:format_regexp
]
Instance Attribute Summary collapse
Instance Method Summary
collapse
Methods included from Helpers
generate, generate_root_numbers, root_number, root_number_to_s
Constructor Details
Returns a new instance of BaseDocument.
33
34
35
|
# File 'lib/digit_checksum/base_document.rb', line 33
def initialize(number)
@number = stripped(number)
end
|
Instance Attribute Details
#number ⇒ Object
Returns the value of attribute number.
31
32
33
|
# File 'lib/digit_checksum/base_document.rb', line 31
def number
@number
end
|
Instance Method Details
#append_verify_digits! ⇒ Object
97
98
99
100
101
102
103
104
105
106
107
108
109
110
|
# File 'lib/digit_checksum/base_document.rb', line 97
def append_verify_digits!
digits = calculate_verify_digits
if (!valid_length? && digits != current_verify_digits)
@number = normalize
verify_digits_positions.each_with_index.flat_map {|position, index|
@number.insert(position, digits.shift)
}
end
@number = stripped(@number)
end
|
#calculate_verify_digits ⇒ Object
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
|
# File 'lib/digit_checksum/base_document.rb', line 71
def calculate_verify_digits
number = without_verify_digits(@number)
digits = []
digits_positions = verify_digits_positions.dup
return [] unless number.size == root_digits_count
get_verify_digits_weights.each_with_index do |data, index|
position, weights = *data
current_number = normalized(number, weights.size)
verify_digit = calculate_verify_digit(current_number, weights)
number.insert((digits_positions.shift + index), verify_digit)
digits << verify_digit
end
digits
end
|
#current_verify_digits ⇒ Object
67
68
69
|
# File 'lib/digit_checksum/base_document.rb', line 67
def current_verify_digits
remove_verify_digits(@number.dup)
end
|
#empty? ⇒ Boolean
49
50
51
|
# File 'lib/digit_checksum/base_document.rb', line 49
def empty?
@number.nil? || @number.empty?
end
|
#full_size ⇒ Object
57
58
59
|
# File 'lib/digit_checksum/base_document.rb', line 57
def full_size
(root_digits_count + verify_digits_count)
end
|
#invalid? ⇒ Boolean
45
46
47
|
# File 'lib/digit_checksum/base_document.rb', line 45
def invalid?
!valid?
end
|
#normalize ⇒ Object
Also known as:
as_array
112
113
114
|
# File 'lib/digit_checksum/base_document.rb', line 112
def normalize
normalized(@number)
end
|
#pretty ⇒ Object
Also known as:
formatted
116
117
118
119
|
# File 'lib/digit_checksum/base_document.rb', line 116
def pretty
numbers = @number.to_s.scan(get_format_regexp).flatten
numbers.empty? ? '' : (get_pretty_format_mask % numbers)
end
|
#remove_verify_digits! ⇒ Object
93
94
95
|
# File 'lib/digit_checksum/base_document.rb', line 93
def remove_verify_digits!
remove_verify_digits(@number)
end
|
#root_digits_count ⇒ Object
133
134
135
|
# File 'lib/digit_checksum/base_document.rb', line 133
def root_digits_count
self.class.root_digits_count
end
|
#size ⇒ Object
Also known as:
length
61
62
63
|
# File 'lib/digit_checksum/base_document.rb', line 61
def size
normalize.length
end
|
#strip ⇒ Object
Also known as:
clear
121
122
123
|
# File 'lib/digit_checksum/base_document.rb', line 121
def strip
stripped(@number)
end
|
#to_s ⇒ Object
125
126
127
|
# File 'lib/digit_checksum/base_document.rb', line 125
def to_s
@number
end
|
#valid? ⇒ Boolean
37
38
39
40
41
42
43
|
# File 'lib/digit_checksum/base_document.rb', line 37
def valid?
return false if (empty? || !valid_length?)
current_verify_digits == calculate_verify_digits
end
|
#valid_length? ⇒ Boolean
53
54
55
|
# File 'lib/digit_checksum/base_document.rb', line 53
def valid_length?
size == full_size
end
|
#verify_digits_count ⇒ Object
129
130
131
|
# File 'lib/digit_checksum/base_document.rb', line 129
def verify_digits_count
get_verify_digits_weights.size
end
|
#verify_digits_positions ⇒ Object
137
138
139
140
141
142
143
144
|
# File 'lib/digit_checksum/base_document.rb', line 137
def verify_digits_positions
begin
get_verify_digits_positions
rescue NameError => e
default_verify_digits_position
end
end
|