lib/measured/unit_system_builder.rb in measured-2.0.0 vs lib/measured/unit_system_builder.rb in measured-2.1.0

- old
+ new

@@ -6,14 +6,51 @@ def unit(unit_name, aliases: [], value: nil) @units << build_unit(unit_name, aliases: aliases, value: value) nil end + def si_unit(unit_name, aliases: [], value: nil) + @units += build_si_units(unit_name, aliases: aliases, value: value) + nil + end + def build Measured::UnitSystem.new(@units) end private + + SI_PREFIXES = [ + ["y", "yocto", -24], + ["z", "zepto", -21], + ["a", "atto", -18], + ["f", "femto", -15], + ["p", "pico", -12], + ["n", "nano", -9], + ["μ", "micro", -6], + ["m", "milli", -3], + ["c", "centi", -2], + ["d", "deci", -1], + ["da", "deca", 1], + ["h", "hecto", 2], + ["k", "kilo", 3], + ["M", "mega", 6], + ["G", "giga", 9], + ["T", "tera", 12], + ["P", "peta", 15], + ["E", "exa", 18], + ["Z", "zetta", 21], + ["Y", "yotta", 24] + ] + + 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 def build_unit(name, aliases: [], value: nil) unit = Measured::Unit.new(name, aliases: aliases, value: value) check_for_duplicate_unit_names!(unit) unit