Sha256: 69f5e5d8e0767be3122b55252ce226c1564b230c45e0bcfd094214b44b02fb2a

Contents?: true

Size: 815 Bytes

Versions: 2

Compression:

Stored size: 815 Bytes

Contents

module TrackingNumberValidator
  class FedExGroundValidator
    WEIGHTINGS = [1, 3, 7]

    attr_reader :tracking_number

    def initialize(tracking_number)
      @tracking_number = tracking_number
    end

    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

    def name
      :fed_ex_ground
    end

    private

    def valid_length?
      tracking_number.length >= 15
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
tracking_number_validator-0.0.2 lib/tracking_number_validator/fed_ex_ground_validator.rb
tracking_number_validator-0.0.1 lib/tracking_number_validator/fed_ex_ground_validator.rb