Skip to content

Commit

Permalink
PaceUnits: Inline conversion factors and 'special' unit of measure ha…
Browse files Browse the repository at this point in the history
…shes with the distance_uom_definition hash
  • Loading branch information
tygerbytes committed Sep 6, 2016
1 parent a445dba commit 6d6a092
Showing 1 changed file with 12 additions and 30 deletions.
42 changes: 12 additions & 30 deletions lib/runby_pace/pace_units.rb
Original file line number Diff line number Diff line change
Expand Up @@ -13,52 +13,34 @@ def self.parse_unit_of_measure(description)
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
if details.has_key? :uom
found_uom = details[:uom]
found_uom_factor = details[:factor]
break
else
found_uom = uom
end
break
end
end
{ uom: found_uom, factor: found_uom_factor }
end

def self.distance_conversion_factor(units)
distance_conversion_factors[units]
@@_distance_uom_definition[units][:conversion_factor]
end

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

### -- Private class methods --

@@_distance_uom_definition =
{ 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) }
{ km: { description: 'Kilometer', conversion_factor: 1.0, synonyms: %w(k km kms kilometer kilometers) },
m: { description: 'Meter', conversion_factor: 0.001, synonyms: %w(m meter meters) },
mi: { description: 'Mile', conversion_factor: 1.609344, synonyms: %w(mi mile miles) },
ft: { description: 'Feet', conversion_factor: 0.0003048, synonyms: %w(ft foot feet) },
# Special UOMs, which just point to "real" UOMs in this hash table
marathon: { description: 'Marathon', uom: :mi, factor: 26.2, synonyms: %w(marathon), uom: :mi, factor: 26.2 }
}

@@_distance_uom_definition_special =
{
marathon: { description: 'Marathon', uom: :mi, factor: 26.2, synonyms: %w(marathon) }
}

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

0 comments on commit 6d6a092

Please sign in to comment.