class TrackingNumberValidator::FedExGroundValidator

Constants

WEIGHTINGS

Attributes

tracking_number[R]

Public Class Methods

new(tracking_number) click to toggle source
# File lib/tracking_number_validator/fed_ex_ground_validator.rb, line 7
def initialize(tracking_number)
  @tracking_number = tracking_number
end

Public Instance Methods

name() click to toggle source
# File lib/tracking_number_validator/fed_ex_ground_validator.rb, line 31
def name
  :fed_ex_ground
end
valid?() click to toggle source
# File lib/tracking_number_validator/fed_ex_ground_validator.rb, line 11
def valid?
  return false unless valid_length?

  reversed = tracking_number.reverse[1...14]

  return false unless reversed.end_with? "00"
  reversed = reversed[0..-3]


  original_check_digit = tracking_number.chars.last.to_i

  sum = 0
  reversed.chars.each_with_index do |char, i|
    sum += WEIGHTINGS[(i) % WEIGHTINGS.size] * char.to_i
  end
  check_digit = (sum % 11) % 10

  original_check_digit == check_digit
end

Private Instance Methods

valid_length?() click to toggle source
# File lib/tracking_number_validator/fed_ex_ground_validator.rb, line 37
def valid_length?
  tracking_number.length >= 15
end