Class: Runby::Distance
- Inherits:
-
Object
- Object
- Runby::Distance
- Defined in:
- lib/runby_pace/distance.rb
Overview
Represents a distance (distance UOM and multiplier)
Instance Attribute Summary collapse
-
#multiplier ⇒ Object
readonly
Returns the value of attribute multiplier.
-
#uom ⇒ Object
readonly
Returns the value of attribute uom.
Class Method Summary collapse
Instance Method Summary collapse
-
#initialize(distance_uom = :km, multiplier = 1) ⇒ Distance
constructor
A new instance of Distance.
- #meters ⇒ Object
- #pluralized_uom ⇒ Object
- #to_s ⇒ Object
Constructor Details
#initialize(distance_uom = :km, multiplier = 1) ⇒ Distance
Returns a new instance of Distance.
5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
# File 'lib/runby_pace/distance.rb', line 5 def initialize(distance_uom = :km, multiplier = 1) # TODO: Test and cleanup if distance_uom.is_a? Distance return init_from_clone distance_uom end raise 'Invalid distance unit of measure' unless [String, Symbol].include? distance_uom.class raise 'Invalid multiplier' unless multiplier.is_a?(Numeric) if distance_uom.is_a? Symbol raise "Unknown unit of measure #{distance_uom}" unless Runby::PaceUnits.known_uom? distance_uom @uom = distance_uom @multiplier = multiplier * 1.0 return end distance = Distance.parse distance_uom @uom = distance.uom @multiplier = distance.multiplier end |
Instance Attribute Details
#multiplier ⇒ Object (readonly)
Returns the value of attribute multiplier.
4 5 6 |
# File 'lib/runby_pace/distance.rb', line 4 def multiplier @multiplier end |
#uom ⇒ Object (readonly)
Returns the value of attribute uom.
4 5 6 |
# File 'lib/runby_pace/distance.rb', line 4 def uom @uom end |
Class Method Details
.parse(str) ⇒ Object
31 32 33 34 35 36 37 38 39 40 41 42 43 44 |
# File 'lib/runby_pace/distance.rb', line 31 def self.parse(str) str = str.strip.chomp.downcase # TODO: handle multipliers with commas/spaces multiplier = str.scan(/[\d,.]+/).first.to_f uom = str.scan(/[-_a-z ]+$/).first # TODO: test V raise "Unable to find distance unit in #{str}" if uom.nil? parsed_uom = Runby::PaceUnits.parse_unit_of_measure uom # TODO: test raise "#{uom} is not recognized as a distance unit" if parsed_uom[:uom].nil? self.new parsed_uom[:uom], parsed_uom[:factor] * multiplier end |
Instance Method Details
#meters ⇒ Object
26 27 28 29 |
# File 'lib/runby_pace/distance.rb', line 26 def meters kilometers = @multiplier * Runby::PaceUnits.distance_conversion_factor(@uom) kilometers * 1000.0 end |
#pluralized_uom ⇒ Object
50 51 52 53 54 55 56 |
# File 'lib/runby_pace/distance.rb', line 50 def pluralized_uom uom_description = PaceUnits.description(@uom).downcase if @multiplier > 1 then uom_description += 's' end uom_description end |
#to_s ⇒ Object
46 47 48 |
# File 'lib/runby_pace/distance.rb', line 46 def to_s "#{format('%g', @multiplier.round(2))} #{pluralized_uom}" end |