class TrackingNumberValidator::DHLValidator
Constants
- VALID_LENGTHS
- WEIGHTINGS
Attributes
tracking_number[R]
Public Class Methods
new(tracking_number)
click to toggle source
# File lib/tracking_number_validator/dhl_validator.rb, line 8 def initialize(tracking_number) @tracking_number = tracking_number end
Public Instance Methods
name()
click to toggle source
# File lib/tracking_number_validator/dhl_validator.rb, line 21 def name :dhl end
valid?()
click to toggle source
# File lib/tracking_number_validator/dhl_validator.rb, line 12 def valid? return false unless valid_length? if tracking_number.length == 10 calculate_modulo_7 else calculate_modulo_10 end end
Private Instance Methods
calculate_modulo_10()
click to toggle source
# File lib/tracking_number_validator/dhl_validator.rb, line 34 def calculate_modulo_10 characters = tracking_number.chars sum = 0 (characters.size - 1).times do |i| sum += WEIGHTINGS[i % WEIGHTINGS.size] * characters[i].to_i end check_digit = ((sum / 10.0).ceil * 10) - sum characters.last.to_i == check_digit end
calculate_modulo_7()
click to toggle source
# File lib/tracking_number_validator/dhl_validator.rb, line 27 def calculate_modulo_7 characters = tracking_number.chars without_checksum = characters[0..-2] remainder = without_checksum.join.to_i % 7 characters.last.to_i == remainder end
valid_length?()
click to toggle source
# File lib/tracking_number_validator/dhl_validator.rb, line 46 def valid_length? VALID_LENGTHS.include? tracking_number.size end