From c933aeee907cff605b664bf108ed3446054cd019 Mon Sep 17 00:00:00 2001 From: halogenandtoast Date: Sat, 14 Sep 2013 17:49:57 -0400 Subject: [PATCH] Handle exponents correctly. --- lib/alchemist/measurement.rb | 6 +++--- lib/alchemist/measurement_convertor.rb | 4 ++-- spec/measurement_spec.rb | 5 +++++ 3 files changed, 10 insertions(+), 5 deletions(-) diff --git a/lib/alchemist/measurement.rb b/lib/alchemist/measurement.rb index 4f4f359..08f3b9b 100644 --- a/lib/alchemist/measurement.rb +++ b/lib/alchemist/measurement.rb @@ -18,7 +18,7 @@ def per def to type = nil if type - convertor.send(type) + convertor.send(type, exponent) else convertor end @@ -52,7 +52,7 @@ def * multiplicand def base unit_type conversion_base = conversion_base_for(unit_type) - convert_to_base conversion_base + convert_to_base(conversion_base) * exponent end def to_s @@ -68,7 +68,7 @@ def to_f end def <=>(other) - (self.to_f * exponent).to_f <=> other.to(unit_name).to_f + self.to_f <=> other.to(unit_name).to_f end def types diff --git a/lib/alchemist/measurement_convertor.rb b/lib/alchemist/measurement_convertor.rb index d023632..43a178a 100644 --- a/lib/alchemist/measurement_convertor.rb +++ b/lib/alchemist/measurement_convertor.rb @@ -9,7 +9,7 @@ def initialize from def method_missing method, *args, &block exponent, unit_name = PrefixParser.new.parse(method) - convert(from.shared_types(unit_name), unit_name, exponent) + convert(from.shared_types(unit_name), unit_name, args.first || exponent) end private @@ -32,7 +32,7 @@ def convert_from_type(type, unit_name, exponent) conversion_factor = library.conversion_base_for(type, unit_name) value = value_from(conversion_base, conversion_factor) - Measurement.new(value, unit_name, exponent) + Measurement.new(value / from.exponent, unit_name, exponent) end def value_from(base, factor) diff --git a/spec/measurement_spec.rb b/spec/measurement_spec.rb index a8c242d..cb1c95d 100644 --- a/spec/measurement_spec.rb +++ b/spec/measurement_spec.rb @@ -67,6 +67,11 @@ module Alchemist expect(1.6.meters.floor).to eq(1.meter) end + it "handles exponents correctly" do + expect(1.kg.to.kg).to eq(1.kg) + expect(1.kg.to(:kg)).to eq(1.kg) + end + describe '#geospatial' do it 'should convert angles to meters' do