Class: TrackingNumberValidator::FedExGroundValidator

Inherits:
Object
  • Object
show all
Defined in:
lib/tracking_number_validator/fed_ex_ground_validator.rb

Constant Summary collapse

WEIGHTINGS =
[1, 3, 7]

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(tracking_number) ⇒ FedExGroundValidator

Returns a new instance of FedExGroundValidator.



7
8
9
# File 'lib/tracking_number_validator/fed_ex_ground_validator.rb', line 7

def initialize(tracking_number)
  @tracking_number = tracking_number
end

Instance Attribute Details

#tracking_numberObject (readonly)

Returns the value of attribute tracking_number.



5
6
7
# File 'lib/tracking_number_validator/fed_ex_ground_validator.rb', line 5

def tracking_number
  @tracking_number
end

Instance Method Details

#nameObject



31
32
33
# File 'lib/tracking_number_validator/fed_ex_ground_validator.rb', line 31

def name
  :fed_ex_ground
end

#valid?Boolean

Returns:

  • (Boolean)


11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
# 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