Class: Measured::Conversion
- Inherits:
-
Object
- Object
- Measured::Conversion
- Defined in:
- lib/measured/conversion.rb
Constant Summary collapse
- ARBITRARY_CONVERSION_PRECISION =
20
Instance Attribute Summary collapse
-
#base_unit ⇒ Object
readonly
Returns the value of attribute base_unit.
-
#units ⇒ Object
readonly
Returns the value of attribute units.
Instance Method Summary collapse
- #add(unit_name, aliases: [], case_sensitive: false, value:) ⇒ Object
- #conversion_table ⇒ Object
- #convert(value, from:, to:) ⇒ Object
-
#initialize ⇒ Conversion
constructor
A new instance of Conversion.
- #set_base(unit_name, aliases: [], case_sensitive: false) ⇒ Object
- #to_unit_name(name) ⇒ Object
- #unit?(name) ⇒ Boolean
- #unit_names ⇒ Object
- #unit_names_with_aliases ⇒ Object
- #unit_or_alias?(name) ⇒ Boolean
Constructor Details
#initialize ⇒ Conversion
Returns a new instance of Conversion.
3 4 5 6 |
# File 'lib/measured/conversion.rb', line 3 def initialize @base_unit = nil @units = [] end |
Instance Attribute Details
#base_unit ⇒ Object (readonly)
Returns the value of attribute base_unit.
8 9 10 |
# File 'lib/measured/conversion.rb', line 8 def base_unit @base_unit end |
#units ⇒ Object (readonly)
Returns the value of attribute units.
8 9 10 |
# File 'lib/measured/conversion.rb', line 8 def units @units end |
Instance Method Details
#add(unit_name, aliases: [], case_sensitive: false, value:) ⇒ Object
14 15 16 |
# File 'lib/measured/conversion.rb', line 14 def add(unit_name, aliases: [], case_sensitive: false, value:) add_new_unit(unit_name, aliases: aliases, case_sensitive: case_sensitive, value: value) end |
#conversion_table ⇒ Object
52 53 54 |
# File 'lib/measured/conversion.rb', line 52 def conversion_table @conversion_table ||= Measured::ConversionTable.new(@units).to_h end |
#convert(value, from:, to:) ⇒ Object
40 41 42 43 44 45 46 47 48 49 50 |
# File 'lib/measured/conversion.rb', line 40 def convert(value, from:, to:) raise Measured::UnitError, "Source unit #{ from } does not exits." unless unit?(from) raise Measured::UnitError, "Converted unit #{ to } does not exits." unless unit?(to) from_unit = unit_for(from) to_unit = unit_for(to) raise Measured::UnitError, "Cannot find conversion entry from #{ from } to #{ to }" unless conversion = conversion_table[from][to] BigDecimal(value.to_r * conversion,ARBITRARY_CONVERSION_PRECISION) end |
#set_base(unit_name, aliases: [], case_sensitive: false) ⇒ Object
10 11 12 |
# File 'lib/measured/conversion.rb', line 10 def set_base(unit_name, aliases: [], case_sensitive: false) add_new_unit(unit_name, aliases: aliases, case_sensitive: case_sensitive, base: true) end |
#to_unit_name(name) ⇒ Object
36 37 38 |
# File 'lib/measured/conversion.rb', line 36 def to_unit_name(name) unit_for(name).name end |
#unit?(name) ⇒ Boolean
31 32 33 34 |
# File 'lib/measured/conversion.rb', line 31 def unit?(name) @units.each{|unit| return true if unit.name_eql?(name)} false end |
#unit_names ⇒ Object
22 23 24 |
# File 'lib/measured/conversion.rb', line 22 def unit_names @units.map{|u| u.name}.sort end |
#unit_names_with_aliases ⇒ Object
18 19 20 |
# File 'lib/measured/conversion.rb', line 18 def unit_names_with_aliases @units.map{|u| u.names}.flatten.sort end |
#unit_or_alias?(name) ⇒ Boolean
26 27 28 29 |
# File 'lib/measured/conversion.rb', line 26 def unit_or_alias?(name) @units.each{|unit| return true if unit.names_include?(name)} false end |