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.
-
#case_sensitive ⇒ Object
readonly
Returns the value of attribute case_sensitive.
-
#units ⇒ Object
readonly
Returns the value of attribute units.
Instance Method Summary collapse
- #add(unit_name, aliases: [], value:) ⇒ Object
- #conversion_table ⇒ Object
- #convert(value, from:, to:) ⇒ Object
-
#initialize(case_sensitive: false) ⇒ Conversion
constructor
A new instance of Conversion.
- #set_base(unit_name, aliases: []) ⇒ 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(case_sensitive: false) ⇒ Conversion
Returns a new instance of Conversion.
3 4 5 6 7 |
# File 'lib/measured/conversion.rb', line 3 def initialize(case_sensitive: false) @base_unit = nil @units = [] @case_sensitive = case_sensitive end |
Instance Attribute Details
#base_unit ⇒ Object (readonly)
Returns the value of attribute base_unit.
9 10 11 |
# File 'lib/measured/conversion.rb', line 9 def base_unit @base_unit end |
#case_sensitive ⇒ Object (readonly)
Returns the value of attribute case_sensitive.
9 10 11 |
# File 'lib/measured/conversion.rb', line 9 def case_sensitive @case_sensitive end |
#units ⇒ Object (readonly)
Returns the value of attribute units.
9 10 11 |
# File 'lib/measured/conversion.rb', line 9 def units @units end |
Instance Method Details
#add(unit_name, aliases: [], value:) ⇒ Object
15 16 17 |
# File 'lib/measured/conversion.rb', line 15 def add(unit_name, aliases: [], value:) add_new_unit(unit_name, aliases: aliases, value: value) end |
#conversion_table ⇒ Object
53 54 55 |
# File 'lib/measured/conversion.rb', line 53 def conversion_table @conversion_table ||= Measured::ConversionTable.new(@units).to_h end |
#convert(value, from:, to:) ⇒ Object
41 42 43 44 45 46 47 48 49 50 51 |
# File 'lib/measured/conversion.rb', line 41 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: []) ⇒ Object
11 12 13 |
# File 'lib/measured/conversion.rb', line 11 def set_base(unit_name, aliases: []) add_new_unit(unit_name, aliases: aliases, base: true) end |
#to_unit_name(name) ⇒ Object
37 38 39 |
# File 'lib/measured/conversion.rb', line 37 def to_unit_name(name) unit_for(name).name end |
#unit?(name) ⇒ Boolean
32 33 34 35 |
# File 'lib/measured/conversion.rb', line 32 def unit?(name) @units.each{|unit| return true if unit.name_eql?(name, case_sensitive: @case_sensitive)} false end |
#unit_names ⇒ Object
23 24 25 |
# File 'lib/measured/conversion.rb', line 23 def unit_names @units.map{|u| u.name}.sort end |
#unit_names_with_aliases ⇒ Object
19 20 21 |
# File 'lib/measured/conversion.rb', line 19 def unit_names_with_aliases @units.map{|u| u.names}.flatten.sort end |
#unit_or_alias?(name) ⇒ Boolean
27 28 29 30 |
# File 'lib/measured/conversion.rb', line 27 def unit_or_alias?(name) @units.each{|unit| return true if unit.names_include?(name, case_sensitive: @case_sensitive)} false end |