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