Method: Measured::UnitSystem#initialize

Defined in:
lib/measured/unit_system.rb

#initialize(units, cache: nil) ⇒ UnitSystem

Returns a new instance of UnitSystem.



5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# File 'lib/measured/unit_system.rb', line 5

def initialize(units, cache: nil)
  @units = units.map { |unit| unit.with(unit_system: self) }
  @units = @units.map do |unit|
    next unit unless unit.conversion_unit
    conversion_unit = @units.find { |u| u.names.include?(unit.conversion_unit) }
    next unit unless conversion_unit
    unit.with(value: [unit.conversion_amount, conversion_unit.name])
  end
  @unit_names = @units.map(&:name).sort.freeze
  @unit_names_with_aliases = @units.flat_map(&:names).sort.freeze
  @unit_name_to_unit = @units.each_with_object({}) do |unit, hash|
    unit.names.each { |name| hash[name.to_s] = unit }
  end
  @conversion_table_builder = Measured::ConversionTableBuilder.new(@units, cache: cache)
  @conversion_table = @conversion_table_builder.to_h.freeze
end