class Measured::UnitSystemBuilder

Constants

SI_PREFIXES

Public Class Methods

new() click to toggle source
# File lib/measured/unit_system_builder.rb, line 3
def initialize
  @units = []
  @cache = nil
end

Public Instance Methods

build() click to toggle source
# File lib/measured/unit_system_builder.rb, line 23
def build
  Measured::UnitSystem.new(@units, cache: @cache)
end
cache(cache_class, *args) click to toggle source
# File lib/measured/unit_system_builder.rb, line 18
def cache(cache_class, *args)
  @cache = {class: cache_class, args: args}
  nil
end
si_unit(unit_name, aliases: [], value: nil) click to toggle source
# File lib/measured/unit_system_builder.rb, line 13
def si_unit(unit_name, aliases: [], value: nil)
  @units += build_si_units(unit_name, aliases: aliases, value: value)
  nil
end
unit(unit_name, aliases: [], value: nil) click to toggle source
# File lib/measured/unit_system_builder.rb, line 8
def unit(unit_name, aliases: [], value: nil)
  @units << build_unit(unit_name, aliases: aliases, value: value)
  nil
end

Private Instance Methods

build_si_units(name, aliases: [], value: nil) click to toggle source
# File lib/measured/unit_system_builder.rb, line 52
def build_si_units(name, aliases: [], value: nil)
  si_units = [build_unit(name, aliases: aliases, value: value)]
  SI_PREFIXES.each do |short, long, exp|
    long_names = aliases.map { |suffix| "#{long}#{suffix}" }
    si_units << build_unit("#{short}#{name}", aliases: long_names, value: "#{10 ** exp} #{name}")
  end
  si_units
end
build_unit(name, aliases: [], value: nil) click to toggle source
# File lib/measured/unit_system_builder.rb, line 61
def build_unit(name, aliases: [], value: nil)
  unit = Measured::Unit.new(name, aliases: aliases, value: value)
  check_for_duplicate_unit_names!(unit)
  unit
end
check_for_duplicate_unit_names!(unit) click to toggle source
# File lib/measured/unit_system_builder.rb, line 67
def check_for_duplicate_unit_names!(unit)
  names = @units.flat_map(&:names)
  if names.any? { |name| unit.names.include?(name) }
    raise Measured::UnitAlreadyAdded.new(unit.name)
  end
end