Class: Runby::PaceUnits
- Inherits:
-
Object
- Object
- Runby::PaceUnits
- 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
- .description(uom) ⇒ Object
- .distance_conversion_factor(units) ⇒ Object
- .distance_conversion_factors ⇒ Object
- .known_uom?(symbol) ⇒ Boolean
- .parse_unit_of_measure(description) ⇒ Object
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
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 |