Class: Distance
- Inherits:
-
Object
- Object
- Distance
- Defined in:
- lib/numeric_distance/distance.rb
Constant Summary collapse
- CONVERSIONS =
{ :miles => 1609.344, :kilometers => 1000.0, :meters => 1.0, :centimeters => -100.0 }
Instance Attribute Summary collapse
-
#value_in_meters ⇒ Object
readonly
Returns the value of attribute value_in_meters.
Class Method Summary collapse
Instance Method Summary collapse
- #+(other) ⇒ Object
- #-(other) ⇒ Object
- #<(other) ⇒ Object
- #<=(other) ⇒ Object
- #==(other) ⇒ Object
- #>(other) ⇒ Object
- #>=(other) ⇒ Object
- #in_centimeters ⇒ Object
- #in_kilometers ⇒ Object
- #in_meters ⇒ Object
- #in_miles ⇒ Object
-
#initialize(value, unit) ⇒ Distance
constructor
A new instance of Distance.
- #inspect ⇒ Object
- #to_f ⇒ Object
- #to_i ⇒ Object
Constructor Details
#initialize(value, unit) ⇒ Distance
Returns a new instance of Distance.
25 26 27 28 29 |
# File 'lib/numeric_distance/distance.rb', line 25 def initialize(value, unit) @value = value @unit = unit @value_in_meters = Distance.unit_in_meters(value, unit) end |
Instance Attribute Details
#value_in_meters ⇒ Object (readonly)
Returns the value of attribute value_in_meters.
2 3 4 |
# File 'lib/numeric_distance/distance.rb', line 2 def value_in_meters @value_in_meters end |
Class Method Details
.meters_in_unit(meters, unit) ⇒ Object
9 10 11 12 13 14 15 |
# File 'lib/numeric_distance/distance.rb', line 9 def self.meters_in_unit(meters, unit) if CONVERSIONS[unit] < 0 meters * CONVERSIONS[unit].abs else meters / CONVERSIONS[unit] end end |
.unit_in_meters(value, unit) ⇒ Object
17 18 19 20 21 22 23 |
# File 'lib/numeric_distance/distance.rb', line 17 def self.unit_in_meters(value, unit) if CONVERSIONS[unit] < 0 value / CONVERSIONS[unit].abs else value * CONVERSIONS[unit] end end |
Instance Method Details
#+(other) ⇒ Object
52 53 54 55 |
# File 'lib/numeric_distance/distance.rb', line 52 def +(other) new_value_in_meters = @value_in_meters + other.value_in_meters ::Distance.new(Distance.meters_in_unit(new_value_in_meters, @unit), @unit) end |
#-(other) ⇒ Object
57 58 59 60 |
# File 'lib/numeric_distance/distance.rb', line 57 def -(other) new_value_in_meters = @value_in_meters - other.value_in_meters ::Distance.new(Distance.meters_in_unit(new_value_in_meters, @unit), @unit) end |
#<(other) ⇒ Object
62 63 64 |
# File 'lib/numeric_distance/distance.rb', line 62 def <(other) @value_in_meters < other.value_in_meters end |
#<=(other) ⇒ Object
66 67 68 |
# File 'lib/numeric_distance/distance.rb', line 66 def <=(other) @value_in_meters <= other.value_in_meters end |
#==(other) ⇒ Object
78 79 80 |
# File 'lib/numeric_distance/distance.rb', line 78 def ==(other) @value_in_meters == other.value_in_meters end |
#>(other) ⇒ Object
70 71 72 |
# File 'lib/numeric_distance/distance.rb', line 70 def >(other) @value_in_meters > other.value_in_meters end |
#>=(other) ⇒ Object
74 75 76 |
# File 'lib/numeric_distance/distance.rb', line 74 def >=(other) @value_in_meters >= other.value_in_meters end |
#in_centimeters ⇒ Object
48 49 50 |
# File 'lib/numeric_distance/distance.rb', line 48 def in_centimeters ::Distance.new(Distance.meters_in_unit(@value_in_meters, :centimeters), :centimeters) end |
#in_kilometers ⇒ Object
40 41 42 |
# File 'lib/numeric_distance/distance.rb', line 40 def in_kilometers ::Distance.new(Distance.meters_in_unit(@value_in_meters, :kilometers), :kilometers) end |
#in_meters ⇒ Object
36 37 38 |
# File 'lib/numeric_distance/distance.rb', line 36 def in_meters ::Distance.new(@value_in_meters, :meters) end |
#in_miles ⇒ Object
44 45 46 |
# File 'lib/numeric_distance/distance.rb', line 44 def in_miles ::Distance.new(Distance.meters_in_unit(@value_in_meters, :miles), :miles) end |
#inspect ⇒ Object
31 32 33 34 |
# File 'lib/numeric_distance/distance.rb', line 31 def inspect formatted_value = (@value.to_i == @value ? @value.to_i : @value).to_s "%s %s" % [formatted_value, (@value == 1 ? @unit.singularize : @unit)] end |
#to_f ⇒ Object
86 87 88 |
# File 'lib/numeric_distance/distance.rb', line 86 def to_f @value.to_f end |
#to_i ⇒ Object
82 83 84 |
# File 'lib/numeric_distance/distance.rb', line 82 def to_i @value.to_i end |