Class: Measured::Conversion
- Inherits:
-
Object
- Object
- Measured::Conversion
- Defined in:
- lib/measured/conversion.rb
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: [], value:) ⇒ Object
- #conversion_table ⇒ Object
- #convert(value, from:, to:) ⇒ Object
-
#initialize ⇒ 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 ⇒ Conversion
Returns a new instance of Conversion.
2 3 4 5 |
# File 'lib/measured/conversion.rb', line 2 def initialize @base_unit = nil @units = [] end |
Instance Attribute Details
#base_unit ⇒ Object (readonly)
Returns the value of attribute base_unit.
7 8 9 |
# File 'lib/measured/conversion.rb', line 7 def base_unit @base_unit end |
#units ⇒ Object (readonly)
Returns the value of attribute units.
7 8 9 |
# File 'lib/measured/conversion.rb', line 7 def units @units end |
Instance Method Details
#add(unit_name, aliases: [], value:) ⇒ Object
13 14 15 |
# File 'lib/measured/conversion.rb', line 13 def add(unit_name, aliases: [], value:) add_new_unit(unit_name, aliases: aliases, value: value) end |
#conversion_table ⇒ Object
49 50 51 |
# File 'lib/measured/conversion.rb', line 49 def conversion_table @conversion_table ||= Measured::ConversionTable.new(@units).to_h end |
#convert(value, from:, to:) ⇒ Object
37 38 39 40 41 42 43 44 45 46 47 |
# File 'lib/measured/conversion.rb', line 37 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] value * conversion end |
#set_base(unit_name, aliases: []) ⇒ Object
9 10 11 |
# File 'lib/measured/conversion.rb', line 9 def set_base(unit_name, aliases: []) add_new_unit(unit_name, aliases: aliases, base: true) end |
#to_unit_name(name) ⇒ Object
33 34 35 |
# File 'lib/measured/conversion.rb', line 33 def to_unit_name(name) unit_for(name).name end |
#unit?(name) ⇒ Boolean
29 30 31 |
# File 'lib/measured/conversion.rb', line 29 def unit?(name) unit_names.include?(name.to_s) end |
#unit_names ⇒ Object
21 22 23 |
# File 'lib/measured/conversion.rb', line 21 def unit_names @units.map{|u| u.name}.sort end |
#unit_names_with_aliases ⇒ Object
17 18 19 |
# File 'lib/measured/conversion.rb', line 17 def unit_names_with_aliases @units.map{|u| u.names}.flatten.sort end |
#unit_or_alias?(name) ⇒ Boolean
25 26 27 |
# File 'lib/measured/conversion.rb', line 25 def unit_or_alias?(name) unit_names_with_aliases.include?(name.to_s) end |