Class: Measured::Conversion

Inherits:
Object
  • Object
show all
Defined in:
lib/measured/conversion.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeConversion

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_unitObject (readonly)

Returns the value of attribute base_unit.



7
8
9
# File 'lib/measured/conversion.rb', line 7

def base_unit
  @base_unit
end

#unitsObject (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_tableObject



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

Returns:

  • (Boolean)


29
30
31
# File 'lib/measured/conversion.rb', line 29

def unit?(name)
  unit_names.include?(name.to_s)
end

#unit_namesObject



21
22
23
# File 'lib/measured/conversion.rb', line 21

def unit_names
  @units.map{|u| u.name}.sort
end

#unit_names_with_aliasesObject



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

Returns:

  • (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