Class: Runby::PaceUnits

Inherits:
Object
  • Object
show all
Defined in:
lib/runby_pace/pace_units.rb

Overview

Represents the distance units (e.g. kilometers, miles) used in paces including the human-readable description of each unit and the factor used to convert it to kilometers.

Constant Summary collapse

@@_distance_uom_definition =

-- Private class methods --

{ km: { description: 'Kilometer', synonyms: %w(k km kms kilometer kilometers) },
  m:  { description: 'Meter', synonyms: %w(m meter meters) },
  mi: { description: 'Mile', synonyms: %w(mi mile miles) },
  ft: { description: 'Feet', synonyms: %w(ft foot feet) }
}
@@_distance_uom_definition_special =
{
    marathon: { description: 'Marathon', uom: :mi, factor: 26.2, synonyms: %w(marathon) }
}

Class Method Summary collapse

Class Method Details

.description(uom) ⇒ Object



6
7
8
# File 'lib/runby_pace/pace_units.rb', line 6

def self.description(uom)
  @@_distance_uom_definition[uom][:description]
end

.distance_conversion_factor(units) ⇒ Object



33
34
35
# File 'lib/runby_pace/pace_units.rb', line 33

def self.distance_conversion_factor(units)
  distance_conversion_factors[units]
end

.distance_conversion_factors ⇒ Object



57
58
59
60
61
62
# File 'lib/runby_pace/pace_units.rb', line 57

def self.distance_conversion_factors
  { km: 1.0,
    m:  0.001,
    mi: 1.609344,
    ft: 0.0003048 }
end

.known_uom?(symbol) ⇒ Boolean

Returns:

  • (Boolean)


37
38
39
40
# File 'lib/runby_pace/pace_units.rb', line 37

def self.known_uom?(symbol)
  # TODO: test
  @@_distance_uom_definition.has_key?(symbol) || @@_distance_uom_definition_special.has_key?(symbol)
end

.parse_unit_of_measure(description) ⇒ Object



10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
# File 'lib/runby_pace/pace_units.rb', line 10

def self.parse_unit_of_measure(description)
  description = description.strip.chomp
  found_uom = nil
  found_uom_factor = 1
  @@_distance_uom_definition.each do |uom, details|
    if details[:synonyms].include? description
      found_uom = uom
      break
    end
  end
  if found_uom.nil?
    # Search the special UOMs
    @@_distance_uom_definition_special.each_value do |details|
      if details[:synonyms].include? description
        found_uom = details[:uom]
        found_uom_factor = details[:factor]
        break
      end
    end
  end
  { uom: found_uom, factor: found_uom_factor }
end