diff --git a/lib/unit_conversion/conversions.rb b/lib/unit_conversion/conversions.rb index f5cccb2..3349fdf 100644 --- a/lib/unit_conversion/conversions.rb +++ b/lib/unit_conversion/conversions.rb @@ -98,9 +98,9 @@ module UnitConversion def convert(value_unit) if value_unit.unit && value_unit.unit.metric? if value_unit.mass? - value_unit = value_unit.convert('oz').auto_unit + value_unit = value_unit.convert('oz').auto_unit.change_formatter(RationalFormatter.new) elsif value_unit.volume? - value_unit = value_unit.convert('cup').auto_unit + value_unit = value_unit.convert('cup').auto_unit.change_formatter(RationalFormatter.new) end end diff --git a/lib/unit_conversion/value_unit.rb b/lib/unit_conversion/value_unit.rb index 4623ca0..db1f6b1 100644 --- a/lib/unit_conversion/value_unit.rb +++ b/lib/unit_conversion/value_unit.rb @@ -74,6 +74,11 @@ module UnitConversion unit.unitwise(value.value) end + def change_formatter(formatter) + @formatter = formatter + self + end + # Returns a new ValueUnit scaled by the given factor def scale(factor) if factor.present? diff --git a/spec/lib/unit_conversion/conversions_spec.rb b/spec/lib/unit_conversion/conversions_spec.rb index 9420b15..8a69423 100644 --- a/spec/lib/unit_conversion/conversions_spec.rb +++ b/spec/lib/unit_conversion/conversions_spec.rb @@ -36,6 +36,16 @@ RSpec.describe UnitConversion::Conversion do end end + describe UnitConversion::StandardUnitConversion do + it 'converts standard units' do + expect(UnitConversion::StandardUnitConversion.new.convert(get_value_unit(200, 'ml')).unit.to_s).to eq 'cup' + expect(UnitConversion::StandardUnitConversion.new.convert(get_value_unit(200, 'ml')).pretty_value).to eq '7/8' + + expect(UnitConversion::StandardUnitConversion.new.convert(get_value_unit(5, 'liter')).unit.to_s).to eq 'gallon' + expect(UnitConversion::StandardUnitConversion.new.convert(get_value_unit(5, 'liter')).pretty_value).to eq '1 5/16' + end + end + describe UnitConversion::ConvertConversion do it 'converts standard units' do expect(UnitConversion::ConvertConversion.new(get_unit('tbsp')).convert(get_value_unit(1, 'cups')).raw_value).to eq 16