Sha256: 44223550867188e1f8195f3cf9323f40621c6ee22d216903f0e26928a21e56ff

Contents?: true

Size: 1.57 KB

Versions: 1

Compression:

Stored size: 1.57 KB

Contents

module Runby
  # 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.
  class DistanceUnits
    def self.description(uom)
      @@_uom_definition[uom][:description]
    end

    def self.parse(description)
      description = description.strip.chomp
      found_uom = nil
      found_uom_factor = 1
      @@_uom_definition.each do |uom, details|
        if details[:synonyms].include? description
          if details.has_key? :uom
            found_uom = details[:uom]
            found_uom_factor = details[:factor]
          else
            found_uom = uom
          end
          break
        end
      end
      { uom: found_uom, factor: found_uom_factor }
    end

    def self.conversion_factor(units)
      @@_uom_definition[units][:conversion_factor]
    end

    def self.known_uom?(symbol)
      # TODO: test
      @@_uom_definition.has_key?(symbol)
    end

    @@_uom_definition =
      { 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', synonyms: %w(marathon), uom: :mi, factor: 26.2 }
      }
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
runby_pace-0.5.85 lib/runby_pace/distance_units.rb