Module: UnitMeasurements

Defined in:
lib/unit_measurements.rb,
lib/unit_measurements/base.rb,
lib/unit_measurements/math.rb,
lib/unit_measurements/unit.rb,
lib/unit_measurements/parser.rb,
lib/unit_measurements/version.rb,
lib/unit_measurements/formatter.rb,
lib/unit_measurements/arithmetic.rb,
lib/unit_measurements/comparison.rb,
lib/unit_measurements/conversion.rb,
lib/unit_measurements/normalizer.rb,
lib/unit_measurements/unit_group.rb,
lib/unit_measurements/measurement.rb,
lib/unit_measurements/errors/unit_error.rb,
lib/unit_measurements/errors/parse_error.rb,
lib/unit_measurements/unit_group_builder.rb,
lib/unit_measurements/errors/unit_already_defined_error.rb,
lib/unit_measurements/errors/primitive_unit_already_set_error.rb

Overview

-*- warn_indent: true -*-

Defined Under Namespace

Modules: Arithmetic, Comparison, Conversion, Formatter, Math Classes: BaseError, Measurement, Normalizer, ParseError, Parser, PrimitiveUnitAlreadySetError, Unit, UnitAlreadyDefinedError, UnitError, UnitGroup, UnitGroupBuilder

Constant Summary collapse

VERSION =

Current stable version.

"5.1.0"
Area =

-*- warn_indent: true -*-

UnitMeasurements.build do
  primitive ""

  system :metric do
    unit "a", value: "100 m²", aliases: ["are", "ares"]
    unit "b", value: "1e-28 m²", aliases: ["barn", "barns"]
    unit "", aliases: ["m^2", "sq m", "square meter", "square meters", "square metre", "square metres"]
    unit "ha", value: "10000 m²", aliases: ["hectare", "hectares"]
    unit "km²", value: "1e+6 m²", aliases: ["km^2", "sq km", "square kilometer", "square kilometers", "square kilometre", "square kilometres"]
  end

  system :imperial do
    unit "ac", value: "4046.8564224 m²", aliases: ["acre", "acres"]
    unit "in²", value: "0.00064516 m²", aliases: ["in^2", "sq in", "square inch", "square inches"]
    unit "ft²", value: "144 in²", aliases: ["ft^2", "sq ft", "square foot", "square feet"]
    unit "yd²", value: "9 ft²", aliases: ["yd^2", "sq yd", "square yard", "square yards"]
    unit "mi²", value: "3097600 yd²", aliases: ["mi^2", "sq mi", "square mile", "square miles"]
    unit "ch²", value: "484 yd²", aliases: ["ch^2", "sq ch", "square chain", "square chains"]
    unit "fur²", value: "48400 yd²", aliases: ["fur^2", "sq fur", "square furlong", "square furlongs"]
    unit "rod²", value: "272 1/4 ft²", aliases: ["rod^2", "sq rod", "square rod", "square rods"]
  end
end
Time =

-*- warn_indent: true -*-

UnitMeasurements.build do
  primitive "s"

  system :metric do
    si_unit "s", aliases: ["sec", "second", "seconds"]

    unit "min", value: "60 s", aliases: ["minute", "minutes"]
  end

  unit "h", value: "60 min", aliases: ["hr", "hour", "hours"]
  unit "d", value: "24 h", aliases: ["day", "days"]
  unit "wk", value: "7 d", aliases: ["week", "weeks"]
  unit "mo", value: "30.4167 d", aliases: ["month", "months"]
  unit "yr", value: "365 d", aliases: ["y", "year", "years"]
  unit "ftn", value: "2 wk", aliases: ["4tnite", "fortnight", "fortnights"]
  unit "qtr", value: "3 mo", aliases: ["quarter", "quarters"]
  unit "dec", value: "10 y", aliases: ["decade", "decades"]
  unit "cent", value: "10 dec", aliases: ["century", "centuries"]
end
Force =

-*- warn_indent: true -*-

UnitMeasurements.build do
  primitive "N"

  system :metric do
    si_unit "N", aliases: ["newton", "newtons"]

    unit "kgf", value: "9.80665 N", aliases: ["kilogram-force", "kilogramme-force"]
  end

  system :centimetre_gram_second do
    unit "dyn", value: "1e-5 N", aliases: ["dyne", "dynes"]
  end

  system :metre_tonne_second do
    unit "tf", value: "8896.443230521 N", aliases: ["tonne-force"]
  end

  system :english_engineering do
    unit "lbf", value: "4.4482216152605 N", aliases: ["pound-force"]
  end

  system :foot_pound_second do
    unit "pdl", value: "0.138254954376 N", aliases: ["poundal", "poundals"]
    unit "ozf", value: "0.27801385095378125 N", aliases: ["ounce-force"]
  end
end
Power =

-*- warn_indent: true -*-

UnitMeasurements.build do
  primitive "W"

  system :metric do
    si_unit "W", aliases: ["watt", "watts"]

    unit "hp (M)", value: "735.49875 W", aliases: ["PS", "metric horsepower"]
  end

  system :imperial do
    unit "hp", value: "745.69987158227022 W", aliases: ["hp (I)", "horsepower"]
  end

  system :centimetre_gram_second do
    unit "erg/s", value: "1e-7 W", aliases: ["erg·s⁻¹", "erg per second", "ergs per second"]
  end

  unit "cal/s", value: "4.1868 W", aliases: ["cal·s⁻¹", "calorie per second", "calories per second"]
end
Energy =

-*- warn_indent: true -*-

UnitMeasurements.build do
  primitive "J"

  system :metric do
    si_unit "J", aliases: ["joule", "joules"]
    si_unit "cal", value: "4.1868 J", aliases: ["calorie", "calories"]

    unit "eV", value: "1.602176634e-19 J", aliases: ["electronvolt", "electron volt", "electron-volt"]
  end

  system :centimetre_gram_second do
    unit "erg", value: "1e-7 J", aliases: ["ergs"]
  end

  system :us_customary do
    si_unit "Btu", value: "1055.05585262 J", aliases: ["btu", "btus", "british thermal unit", "british thermal units"]

    unit "thm", value: "100 kBtu", aliases: ["therm", "therms"]
    unit "quad", value: "1.05505585262e+18 J", aliases: ["quads"]
  end

  unit "foe", value: "1e+51 erg", aliases: ["bethe"]
end
Length =

-*- warn_indent: true -*-

UnitMeasurements.build do
  primitive "m"

  system :metric do
    si_unit "m", aliases: ["meter", "metre", "meters", "metres"]
  end

  system :imperial do
    unit "in", value: "25.4 mm", aliases: ['"', "inch", "inches"]
    unit "ft", value: "12 in", aliases: ["'", "foot", "feet"]
    unit "yd", value: "3 ft", aliases: ["yard", "yards"]
    unit "mi", value: "1760 yd", aliases: ["mile", "miles", "statute mile", "international mile"]
    unit "ch", value: "22 yd", aliases: ["chain", "chains"]
    unit "th", value: "1/1000 in", aliases: ["thou", "thousandth of an inch"]
    unit "ftm", value: "6 ft", aliases: ["fathom", "fathoms"]
    unit "fur", value: "220 yd", aliases: ["furlong", "furlongs"]
    unit "nmi", value: "1852 m", aliases: ["NMI", "M", "NM", "nautical mile", "nautical miles"]
    unit "rod", value: "16 1/2 ft", aliases: ["rods", "perch", "pole", "lug"]
  end

  system :astronomical do
    unit "au", value: "149597870700 m", aliases: ["astronomical unit", "astronomical units"]
    unit "pc", value: [Rational(648000, Math::PI), "au"], aliases: ["parsec", "parsecs"]
  end
end
Torque =

-*- warn_indent: true -*-

UnitMeasurements.build do
  primitive "N·m"

  system :metric do
    si_unit "N·m", aliases: ["N*m", "newton meter", "newton metre"]

    unit "kgf·m", value: "9.80665 N·m", aliases: ["kgf*m", "Kilogram-force meter", "kilogramme-force metre"]
  end

  system :centimetre_gram_second do
    unit "dyn·cm", value: "1e-7 N·m", aliases: ["dyn*cm", "dyne centimeter", "dyne centimetre"]
  end

  system :foot_pound_second do
    unit "pdl⋅ft", value: "0.0421401100938048 N·m", aliases: ["pdl*ft", "poundal foot", "foot-poundal"]
    unit "ozf·in", value: "0.00706155 N·m", aliases: ["oz⋅in", "ozf*in", "oz*in", "ounce-force inch", "ounce-inch"]
    unit "ozf·ft", value: "12 ozf·in", aliases: ["oz⋅ft", "ozf*ft", "oz*ft", "ounce-force foot", "ounce-foot"]
  end

  system :imperial do
    unit "lbf⋅in", value: "0.1129848290276167 N·m", aliases: ["lb⋅in", "lbf*in", "lb*in", "pound-force inch", "pound-inch"]
  end

  system :english_engineering do
    unit "lbf⋅ft", value: "12 lbf⋅in", aliases: ["lb⋅ft", "lbf*ft", "lb*ft", "pound-force foot", "pound-foot"]
  end
end
Volume =

-*- warn_indent: true -*-

UnitMeasurements.build do
  primitive ""

  system :metric do
    si_unit "l", aliases: ["liter", "litre", "liters", "litres"]

    unit "", value: "1000 l", aliases: ["m^3", "cu m", "cubic meter", "cubic meters", "cubic metre", "cubic metres"]
    unit "mm³", value: "1e-9 m³", aliases: ["mm^3", "cu mm", "cubic millimeter", "cubic millimeters", "cubic millimetre", "cubic millimetres"]
    unit "cm³", value: "1e-6 m³", aliases: ["cm^3", "cu cm", "cubic centimeter", "cubic centimeters", "cubic centimetre", "cubic centimetres"]
    unit "dm³", value: "1 l", aliases: ["dm^3", "cu dm", "cubic decimeter", "cubic decimeters", "cubic decimetre", "cubic decimetres"]
    unit "km³", value: "1e+9 m³", aliases: ["km^3", "cu km", "cubic kilometer", "cubic kilometers", "cubic kilometre", "cubic kilometres"]
  end

  system :imperial do
    unit "in³", value: "16.387064 ml", aliases: ["in^3", "cu in", "cubic inch", "cubic inches"]
    unit "ft³", value: "1728 in³", aliases: ["ft^3", "cu ft", "cubic foot", "cubic feet"]
    unit "yd³", value: "27 ft³", aliases: ["yd^3", "cu yd", "cubic yard", "cubic yards"]
    unit "mi³", value: "5451776000 yd³", aliases: ["mi^3", "cu mi", "cubic mile", "cubic miles"]

    unit "c", value: "284.130625e-6 m³", aliases: ["cup", "cups"]
    unit "qt", value: "0.0011365225 m³", aliases: ["quart", "quarts"]
    unit "gi", value: "1/2 c", aliases: ["gill", "gills"]
    unit "pt", value: "1/8 gal", aliases: ["pint", "pints"]
    unit "gal", value: "4.54609 dm³", aliases: ["gallon", "gallons"]
    unit "bbl", value: "36 gal", aliases: ["barrel", "barrels"]
    unit "tsp", value: "1/24 gi", aliases: ["teaspoon", "teaspoons"]
    unit "tbsp", value: "3 tsp", aliases: ["tbs", "tablespoon", "tablespoons"]
    unit "floz", value: "1/160 gal", aliases: ["fluid ounce", "fluid ounces"]
  end
end
Weight =

-*- warn_indent: true -*-

UnitMeasurements.build do
  primitive "kg"

  system :metric do
    si_unit "g", aliases: ["gram", "grams", "gramme", "grammes"]

    unit "q", value: "100 kg", aliases: ["quintal", "quintals"]
    unit "t", value: "1000 kg", aliases: ["tonne", "tonnes", "metric tonne", "metric tonnes"]
    unit "ct", value: "200 mg", aliases: ["carat", "carats"]
    unit "Da", value: "1.660538921e-27 kg", aliases: ["dalton", "daltons"]
  end

  system :imperial do
    unit "lb", value: [Rational(45_359_237, 1e+8), "kg"], aliases: ["lbs", "lbm", "pound-mass", "pound", "pounds", "#"]
    unit "st", value: "14 lb", aliases: ["stone", "stones"]
    unit "oz", value: [Rational(1, 16), "lb"], aliases: ["ounce", "ounces"]
  end

  system :troy_weight do
    unit "gr", value: [Rational(1, 7000), "lb"], aliases: ["grain", "grains"]
    unit "ozt", value: "480 gr", aliases: ["troy ounce", "troy ounces"]
    unit "dwt", value: [Rational(1, 20), "ozt"], aliases: ["pennyweight", "pennyweights"]
  end

  system :avoirdupois do
    unit "dr", value: [Rational(1, 16), "oz"], aliases: ["dram", "drams"]
  end

  system :foot_pound_second do
    unit "slug", value: "32.1740 lb", aliases: ["slugs"]
  end
end
Density =

-*- warn_indent: true -*-

UnitMeasurements.build do
  primitive "kg/m³"

  system :metric do
    unit "g/m³", aliases: ["g/m^3", "g·m⁻³", "gram per cubic meter", "grams per cubic meter", "gramme per cubic metre", "grammes per cubic metre"]
    unit "kg/m³", value: "1000 g/m³", aliases: ["kg/m^3", "kg·m⁻³", "kilogram per cubic meter", "kilograms per cubic meter", "kilogramme per cubic metre", "kilogrammes per cubic metre"]

    unit "g/l", value: "1 kg/m³", aliases: ["g·l⁻¹", "gram per liter", "grams per liter", "gramme per litre", "grammes per litre"]
    unit "g/ml", value: "1000 g/l", aliases: ["g·ml⁻¹", "gram per milliliter", "grams per milliliter", "gramme per millilitre", "grammes per millilitre"]
    unit "kg/l", value: "1e+6 g/m³", aliases: ["kg·l⁻¹", "kilogram per liter", "kilograms per liter", "kilogramme per litre", "kilogrammes per litre"]
  end
end
Pressure =

-*- warn_indent: true -*-

UnitMeasurements.build do
  primitive "Pa"

  system :metric do
    si_unit "Pa", aliases: ["pascal", "pascals"]

    unit "bar", value: "100 kPa", aliases: ["bars"]
  end

  system :centimetre_gram_second do
    unit "Ba", value: "0.1 Pa", aliases: ["barye", "baryes"]
  end

  system :metre_tonne_second do
    unit "pz", value: "1 kPa", aliases: ["pièze"]
  end

  unit "at", value: "98066.5 Pa", aliases: ["technical atmosphere", "technical atmospheres"]
  unit "atm", value: "101325 Pa", aliases: ["atmosphere", "atmospheres"]
  unit "Torr", value: [Rational(1, 760), "atm"], aliases: ["torr"]
end
Quantity =

-*- warn_indent: true -*-

UnitMeasurements.build do
  primitive "pc"

  unit "pc", aliases: ["pcs", "piece", "pieces"]

  unit "pr", value: "2 pc", aliases: ["pair", "pairs"]
  unit "dz", value: "6 pr", aliases: ["doz", "dozen", "dozens"]
  unit "gr", value: "12 doz", aliases: ["gross", "grosses"]
  unit "gg", value: "12 gr", aliases: ["great gross", "great grosses", "grand gross", "grand grosses", "dozen gross", "dozen grosses"]
end
Velocity =

-*- warn_indent: true -*-

UnitMeasurements.build do
  primitive "m/s"

  system :metric do
    unit "m/s", aliases: ["m·s⁻¹", "meter per second", "meters per second", "metre per second", "metres per second"]
    unit "m/min", value: "1/60 m/s", aliases: ["m·min⁻¹", "meter per minute", "meters per minute", "metre per minute", "metres per minute"]
    unit "m/h", value: "1/60 m/min", aliases: ["m·h⁻¹", "meter per hour", "meters per hour", "metre per hour", "metres per hour"]
  end

  system :imperial do
    unit "in/s", value: "0.0254 m/s", aliases: ["in·s⁻¹", "inch per second", "inches per second"]
    unit "in/min", value: "1/60 in/s", aliases: ["in·min⁻¹", "inch per minute", "inches per minute"]
    unit "in/h", value: "1/60 in/min", aliases: ["in·h⁻¹", "inch per hour", "inches per hour"]
  end

  system :foot_pound_second do
    unit "ft/s", value: "12 in/s", aliases: ["ft·s⁻¹", "foot per second", "feet per second"]
    unit "ft/min", value: "1/60 ft/s", aliases: ["ft·min⁻¹", "foot per minute", "feet per minute"]
    unit "ft/h", value: "1/60 ft/min", aliases: ["ft·h⁻¹", "foot per hour", "feet per hour"]
  end

  system :meteorology_aviation_maritime do
    unit "Kn", value: "0.514773 m/s", aliases: ["kt", "knot", "knots"]
  end
end
Frequency =

-*- warn_indent: true -*-

UnitMeasurements.build do
  primitive "Hz"

  system :metric do
    si_unit "Hz", aliases: ["hertz", "hertzes"]

    unit "rad/s", value: [Rational(1, (2 * Math::PI)), "Hz"], aliases: ["rad·s⁻¹", "radian per second", "radians per second"]
  end

  unit "deg/s", value: [Rational(1, 360), "Hz"], aliases: ["°/s", "deg·s⁻¹", "degree per second", "degrees per second"]
  unit "rev/s", value: [1, "Hz"], aliases: ["rps", "rev·s⁻¹", "revolution per second", "revolutions per second"]
end
Luminance =

-*- warn_indent: true -*-

UnitMeasurements.build do
  primitive "cd/m²"

  system :metric do
    unit "cd/m²", aliases: ["cd/m^2", "cd·m⁻²", "candela per square metre", "candelas per square metre", "candela per square meter", "candelas per square meter"]
  end

  system :us_customary do
    unit "cd/in²", value: "1550.0031 cd/m²", aliases: ["cd/in^2", "cd·in⁻²", "candela per square inch", "candelas per square inch"]
    unit "cd/ft²", value: "10.763910417 cd/m²", aliases: ["cd/ft^2", "cd·ft⁻²", "candela per square foot", "candelas per square foot"]
    unit "fL", value: [Rational(1, Math::PI), "cd/ft²"], aliases: ["ft-L", "foot lambert", "foot-lambert"]
  end

  system :centimetre_gram_second do
    unit "L", value: [Rational(10000, Math::PI), "cd/m²"], aliases: ["lambert", "lamberts"]
    unit "sb", value: "10000 cd/m²", aliases: ["stlib"]
  end
end
Illuminance =

-*- warn_indent: true -*-

UnitMeasurements.build do
  primitive "lx"

  system :metric do
    si_unit "lx", aliases: ["lux", "lm/m²", "lm/m^2", "lm·m⁻²", "lumen per square metre", "lumen per square meter"]
  end

  system :centimetre_gram_second do
    unit "ph", value: "10000 lx", aliases: ["phot", "phots", "lm/cm²", "lm/cm^2", "lm·cm⁻²", "lumen per square centimetre", "lumen per square centimeter"]
  end

  system :us_customary do
    unit "fc", value: "10.763910417 lx", aliases: ["footcandle", "lm/ft²", "lm/ft^2", "lm·ft⁻²", "lumen per square foot"]
  end

  unit "nx", value: "1 mlx", aliases: ["nox"]
end
PlaneAngle =

-*- warn_indent: true -*-

UnitMeasurements.build do
  primitive "rad"

  system :metric do
    si_unit "rad", aliases: ["radian", "radians"]

    unit "gon", value: [(Math::PI / 200), "rad"], aliases: ["", "grad", "gradian", "gradians"] # (π / 200) rad
  end

  unit "deg", value: [(Math::PI / 180), "rad"], aliases: ["°", "degree", "degrees"] # (π / 180) rad
  unit "cir", value: [360, "deg"], aliases: ["circle", "circles"] # (2 * π) rad
  unit "mil", value: [Rational(1, 6400), "cir"], aliases: ["mils"] # ((2 * π) / 6400) rad
  unit "rev", value: [1, "cir"], aliases: ["revolution", "revolutions"] # (2 * π) rad

  unit "brad", value: [(Math::PI / 128), "rad"], aliases: ["", "bdeg", "binary degree", "binary radian", "binary degrees", "binary radians"] # (π / 128) rad

  unit "arcmin", value: [Rational(1, 60), "deg"], aliases: ["", "amin", "arcminute", "arcminutes"] # ((π / 180) / 60) rad
  unit "arcsec", value: [Rational(1, 60), "arcmin"], aliases: ["", "asec", "arcsecond", "arcseconds"] # ((π / 180) / 3600) rad
end
SolidAngle =

-*- warn_indent: true -*-

UnitMeasurements.build do
  primitive "sr"

  system :metric do
    si_unit "sr", aliases: ["steradian", "steradians"]
  end

  unit "sp", value: [(4 * Math::PI), "sr"], aliases: ["spat", "spats"] # (4 * π) sr
  unit "deg²", value: [((Math::PI / 180) ** 2), "sr"], aliases: ["(°)²", "sq °", "square degree", "square degrees"] # (π / 180)² sr
  unit "arcmin²", value: [(Rational(1, 60) ** 2), "deg²"], aliases: ["(′)²", "sq ′", "square arcminute", "square arcminutes"] # ((π / 180) * (1 / 60))² sr
  unit "arcsec²", value: [(Rational(1, 60) ** 2), "arcmin²"], aliases: ["(″)²", "sq ″", "square arcsecond", "square arcseconds"] # ((π / 180) * (1 / 3600))² sr
end
SoundLevel =

-*- warn_indent: true -*-

UnitMeasurements.build do
  primitive "dB"

  system :metric do
    si_unit "B", aliases: ["bel", "bels"]
  end

  unit "Np", value: [(20 / Math.log(10)), "dB"], aliases: ["neper", "nepers"] # (20 / ln(10)) dB
end
Temperature =

-*- warn_indent: true -*-

UnitMeasurements.build do
  primitive "K"

  system :metric do
    si_unit "K", aliases: ["kelvin", "kelvins"]
  end

  system :english_engineering do
    unit "°R", value: "5/9 K", aliases: ["R", "°Ra", "Ra", "rankine"]
  end
end
Acceleration =

-*- warn_indent: true -*-

UnitMeasurements.build do
  primitive "m/s²"

  system :metric do
    si_unit "m/s²", aliases: ["m/s^2", "m·s⁻²", "meter per second squared", "meters per second squared", "metre per second squared", "metres per second squared"]
  end

  system :imperial do
    unit "in/s²", value: "0.0254 m/s²", aliases: ["in/s^2", "in·s⁻²", "inch per second squared", "inches per second squared"]
  end

  system :foot_pound_second do
    unit "ft/s²", value: "0.3048 m/s²", aliases: ["ft/s^2", "ft·s⁻²", "foot per second squared", "feet per second squared"]
  end

  system :meteorology_aviation_maritime do
    unit "Kn/s", value: "0.5144444 m/s²", aliases: ["knot per second", "knots per second"]
  end
end
LuminousFlux =

-*- warn_indent: true -*-

UnitMeasurements.build do
  primitive "lm"

  system :metric do
    si_unit "lm", aliases: ["lumen", "lumens"]
  end
end
MagneticFlux =

-*- warn_indent: true -*-

UnitMeasurements.build do
  primitive "Wb"

  system :metric do
    si_unit "Wb", aliases: ["weber", "webers"]

    unit "T·m²", value: "1 Wb", aliases: ["T*m^2", "tesla-square meter", "tesla-square metre"]
  end

  system :centimetre_gram_second do
    unit "Mx", value: "1e-8 Wb", aliases: ["maxwell", "maxwells"]
    unit "G·cm²", value: "1e-8 Wb", aliases: ["G*cm^2", "gauss-square centimeter", "gauss-square centimetre"]
  end
end
Radioactivity =

-*- warn_indent: true -*-

UnitMeasurements.build do
  primitive "Bq"

  system :metric do
    si_unit "Bq", aliases: ["becquerel", "becquerels"]
  end

  unit "Ci", value: "3.7e+10 Bq", aliases: ["curie", "curies"]
  unit "Rd", value: "1e+6 Bq", aliases: ["rutherford", "rutherfords"]
end
MagneticField =

-*- warn_indent: true -*-

UnitMeasurements.build do
  primitive "Oe"

  system :metric do
    si_unit "Oe", aliases: ["oersted", "oersteds"]

    unit "A/m", value: [(Math::PI / 250), "Oe"], aliases: ["A·m⁻¹", "ampere/meter", "ampere/metre", "amperes/meter", "amperes/metre", "ampere per meter", "ampere per metre", "amperes per meter", "amperes per metre"]
   end
end
ElectricCharge =

-*- warn_indent: true -*-

UnitMeasurements.build do
  primitive "C"

  system :metric do
    si_unit "C", aliases: ["coulomb", "coulombs"]
  end

  system :centimetre_gram_second do
    unit "Fr", value: "3.335641e-10 C", aliases: ["franklin", "franklins"]
    unit "Fd", value: "96485.3377164 C", aliases: ["faraday", "faradays"]
    unit "abC", value: "10 C", aliases: ["abcoulomb", "abcoulombs"]
    unit "statC", value: "3.335641e-10 C", aliases: ["statcoulomb", "statcoulombs"]
  end
end
AngularVelocity =

-*- warn_indent: true -*-

UnitMeasurements.build do
  primitive "rad/s"

  system :metric do
    unit "rad/s", aliases: ["rad·s⁻¹", "radian per second", "radians per second"]
    unit "rad/min", value: "1/60 rad/s", aliases: ["rad·min⁻¹", "radian per minute", "radians per minute"]
    unit "rad/h", value: "1/60 rad/min", aliases: ["rad·h⁻¹", "radian per hour", "radians per hour"]

    unit "gon/s", value: [(Math::PI / 200), "rad/s"], aliases: ["ᵍ/s", "gon·s⁻¹", "gradian per second", "gradians per second"]
    unit "gon/min", value: "1/60 gon/s", aliases: ["ᵍ/min", "gon·min⁻¹", "gradian per minute", "gradians per minute"]
    unit "gon/h", value: "1/60 gon/min", aliases: ["ᵍ/h", "gon·h⁻¹", "gradian per hour", "gradians per hour"]
  end

  unit "deg/s", value: [(Math::PI / 180), "rad/s"], aliases: ["°/s", "deg·s⁻¹", "degree per second", "degrees per second"]
  unit "deg/min", value: "1/60 deg/s", aliases: ["°/min", "deg·min⁻¹", "degree per minute", "degrees per minute"]
  unit "deg/h", value: "1/60 deg/min", aliases: ["°/h", "deg·h⁻¹", "degree per hour", "degrees per hour"]

  unit "rev/s", value: "360 deg/s", aliases: ["rev·s⁻¹", "revolution per second", "revolutions per second"]
  unit "rev/min", value: "1/60 rev/s", aliases: ["rev·min⁻¹", "revolution per minute", "revolutions per minute"]
  unit "rev/h", value: "1/60 rev/min", aliases: ["rev·h⁻¹", "revolution per hour", "revolutions per hour"]
end
ElectricCurrent =

-*- warn_indent: true -*-

UnitMeasurements.build do
  primitive "A"

  system :metric do
    si_unit "A", aliases: ["amp", "ampere", "amperes"]
  end

  system :centimetre_gram_second do
    unit "Bi", value: "10 A", aliases: ["biot", "biots"]
    unit "abA", value: "10 A", aliases: ["abampere", "abamperes"]
    unit "statA", value: "3.33564e-10 A", aliases: ["statampere", "statamperes"]
  end
end
DynamicViscosity =

-*- warn_indent: true -*-

UnitMeasurements.build do
  primitive "Pa⋅s"

  system :metric do
    si_unit "Pa⋅s", aliases: ["Pa*s", "pascal second"]
  end

  system :centimetre_gram_second do
    unit "P", value: "1 dPa⋅s", aliases: ["dyne·s/cm²", "dyne*s/cm^2", "poise"]
    unit "Pl", value: "10 P", aliases: ["poiseuille"]
  end

  system :foot_pound_second do
    unit "lb/(ft⋅s)", value: "1.488164 Pa⋅s", aliases: ["lb/(ft*s)", "pound per foot second"]
    unit "lb/(ft⋅h)", value: "0.0004133789 Pa⋅s", aliases: ["lb/(ft*h)", "pound per foot hour"]

    unit "(lbf⋅s)/ft²", value: "47.88026 Pa⋅s", aliases: ["(lb⋅s)/ft²", "(lbf*s)/ft^2", "(lb*s)/ft^2", "pound-force second per square foot"]
    unit "(lbf⋅s)/in²", value: "6894.757 Pa⋅s", aliases: ["(lb⋅s)/in²", "(lbf*s)/in^2", "(lb*s)/in^2", "pound-force second per square inch"]
  end
end
KineticViscosity =

-*- warn_indent: true -*-

UnitMeasurements.build do
  primitive "m²/s"

  system :metric do
    unit "m²/s", aliases: ["m^2/s", "square metre per second", "square meter per second", "square metres per second", "square meters per second"]
  end

  system :foot_pound_second do
    unit "ft²/s", value: "0.09290304 m²/s", aliases: ["ft^2/s", "square foot per second", "square feet per second"]
    unit "in²/s", value: "0.006944444444444443 ft²/s", aliases: ["in^2/s", "square inch per second", "square inches per second"]
  end

  system :centimetre_gram_second do
    unit "St", value: "1e-4 m²/s", aliases: ["strokes"]
  end
end
CatalyticActivity =

-*- warn_indent: true -*-

UnitMeasurements.build do
  primitive "kat"

  system :metric do
    si_unit "kat", aliases: ["katal", "katals"]
  end

  unit "U", value: "1/60 μkat", aliases: ["unit", "units", "enzUnit"]
end
ElectricPotential =

-*- warn_indent: true -*-

UnitMeasurements.build do
  primitive "V"

  system :metric do
    si_unit "V", aliases: ["volt", "volts"]

    unit "W/A", value: "1 V", aliases: ["W·A⁻¹", "watt per ampere", "watts per ampere"]
    unit "J/C", value: "1 V", aliases: ["J·C⁻¹", "joule per coulomb", "joules per coulomb"]
  end

  system :centimetre_gram_second do
    unit "abV", value: "1e-8 V", aliases: ["abvolt", "abvolts"]
    unit "statV", value: "299.792458 V", aliases: ["statvolt", "statvolts"]
  end
end
LuminousIntensity =

-*- warn_indent: true -*-

UnitMeasurements.build do
  primitive "cd"

  system :metric do
    si_unit "cd", aliases: ["candela", "candelas"]
  end

  unit "hk", value: "0.92 cd", aliases: ["hefnerkerze"]
end
MagneticInduction =

-*- warn_indent: true -*-

UnitMeasurements.build do
  primitive "T"

  system :metric do
    si_unit "T", aliases: ["tesla", "teslas"]
  end

  system :centimetre_gram_second do
    unit "G", value: "1e-4 T", aliases: ["Gs", "gauss", "gausses"]
  end
end
RadiationExposure =

-*- warn_indent: true -*-

UnitMeasurements.build do
  primitive "C/kg"

  system :metric do
    si_unit "C/kg", aliases: ["coulomb per kilogram", "coulomb per kilogramme", "coulombs per kilogram", "coulombs per kilogramme"]
  end

  system :legacy_units do
    unit "R", value: "0.000258 C/kg", aliases: ["röntgen", "roentgen", "roentgens"]
  end
end
AmountOfSubstance =

-*- warn_indent: true -*-

UnitMeasurements.build do
  primitive "mol"

  system :metric do
    si_unit "mol", aliases: ["mole", "moles"]
  end

  unit "NA", value: "1.6605389210322e-24 mol", aliases: ["avogadro constant"]
end
InformationEntropy =

-*- warn_indent: true -*-

UnitMeasurements.build do
  primitive "nat"

  si_unit "b", value: "1 Sh", aliases: ["bit", "bits"], add_binary_prefixes: true
  si_unit "B", value: [2.pow(3), "b"], aliases: ["byte", "bytes"], add_binary_prefixes: true

  unit "Sh", value: [Math.log(2), "nat"], aliases: ["shannon", "shannons"]
  unit "nat", aliases: ["nit", "nepit", "natural unit of information"]
  unit "nybl", value: [2.pow(2), "b"], aliases: ["nibble", "nibbles", "nybble", "nyble"]
  unit "Hart", value: [Math.log(10), "nat"], aliases: ["hartley", "ban", "dit"]
end
MagnetomotiveForce =

-*- warn_indent: true -*-

UnitMeasurements.build do
  primitive "A⋅t"

  system :metric do
    unit "A⋅t", aliases: ["A*t", "ampere-turn"]
  end

  system :centimetre_gram_second do
    unit "Gb", value: [Rational(10, (4 * Math::PI)), "A⋅t"], aliases: ["Gi", "gilbert", "gilberts"]
  end
end
AngularAcceleration =

-*- warn_indent: true -*-

UnitMeasurements.build do
  primitive "rad/s²"

  system :metric do
    si_unit "rad/s²", aliases: ["rad/s^2", "rad·s⁻²", "radian per second squared", "radians per second squared"]
    unit "gon/s²", value: [(Math::PI / 200), "rad/s²"], aliases: ["gon/s^2", "ᵍ/s²", "gon·s⁻²", "gradian per second squared", "gradians per second squared"]
  end

  unit "deg/s²", value: [(Math::PI / 180), "rad/s²"], aliases: ["deg/s^2", "°/s²", "deg·s⁻²", "degree per second squared", "degrees per second squared"]
end
ElectricConductance =

-*- warn_indent: true -*-

UnitMeasurements.build do
  primitive "S"

  system :metric do
    si_unit "S", aliases: ["", "Ω⁻¹", "siemens", "mho", "mhos"]

    unit "A/V", value: "1 S", aliases: ["A·V⁻¹", "amp/volt", "amps/volt", "ampere/volt", "amperes/volt", "ampere per volt", "amperes per volt"]
  end

  system :centimetre_gram_second do
    unit "abS", value: "1e+9 S", aliases: ["ab℧", "absiemens", "abmho", "abmhos"]
    unit "statS", value: "1.112347e-12 S", aliases: ["stat℧", "statsiemens", "statmho", "statmhos"]
  end
end
ElectricalElastance =

-*- warn_indent: true -*-

UnitMeasurements.build do
  primitive "D"

  system :metric do
    si_unit "D", aliases: ["F⁻¹", "daraf", "darafs", "reciprocal farad", "reciprocal farads"]

    unit "V/C", value: "1 D", aliases: ["V·C⁻¹", "volt/coulomb", "volts/coulomb", "volt per coulomb", "volts per coulomb"]
  end
end
ElectricalInductance =

-*- warn_indent: true -*-

UnitMeasurements.build do
  primitive "H"

  system :metric do
    si_unit "H", aliases: ["henry", "henries"]

    unit "Wb/A", value: "1 H", aliases: ["Wb·A⁻¹", "weber per ampere", "webers per ampere"]
  end

  system :centimetre_gram_second do
    unit "abH", value: "1e-9 H", aliases: ["abhenry", "abhenries"]
    unit "statH", value: "8.98755178736818e+11 H", aliases: ["stathenry", "stathenries"]
  end
end
ElectricalResistance =

-*- warn_indent: true -*-

UnitMeasurements.build do
  primitive "Ω"

  system :metric do
    si_unit "Ω", aliases: ["ω", "ohm", "ohms", "reciprocal siemens"]

    unit "S", value: "1 Ω", aliases: ["siemens", "mho", "mhos"]
    unit "V/A", value: "1 Ω", aliases: ["V·A⁻¹", "volt/amp", "volts/amp", "volt/ampere", "volts/ampere", "volt per ampere", "volts per ampere"]
  end

  system :centimetre_gram_second do
    unit "abΩ", value: "1e-9 Ω", aliases: ["abω", "abohm", "abohms"]
    unit "statΩ", value: "8.98755178737e+11 Ω", aliases: ["statω", "statohm", "statohms"]
  end
end
ElectricDipoleMoment =

-*- warn_indent: true -*-

UnitMeasurements.build do
  primitive "C⋅m"

  system :metric do
    si_unit "C⋅m", aliases: ["C*m", "coulomb-meter", "coulomb-metre"]
  end

  system :centimetre_gram_second do
    unit "D", value: "3.33564095e-30 C⋅m", aliases: ["debye", "debyes"]
  end
end
ElectricalCapacitance =

-*- warn_indent: true -*-

UnitMeasurements.build do
  primitive "F"

  system :metric do
    si_unit "F", aliases: ["farad", "farads"]

    unit "C/V", value: "1 F", aliases: ["C·V⁻¹", "coulomb/volt", "coulombs/volt", "coulomb per volt", "coulombs per volt"]
  end

  system :centimetre_gram_second do
    unit "abF", value: "1e+9 F", aliases: ["abfarad", "abfarads"]
    unit "statF", value: "1.1127e-12 F", aliases: ["statfarad", "statfarads"]
  end
end
RadiationAbsorbedDose =

-*- warn_indent: true -*-

UnitMeasurements.build do
  primitive "Gy"

  system :metric do
    si_unit "Gy", aliases: ["gray", "grays"]
  end

  system :centimetre_gram_second do
    unit "erg/g", value: "1e-4 Gy", aliases: ["erg per gram", "erg per gramme", "ergs per gram", "ergs per gramme"]
    unit "rad", value: "0.01 Gy", aliases: ["radiation absorbed dose"]
  end
end
RadiationEquivalentDose =

-*- warn_indent: true -*-

UnitMeasurements.build do
  primitive "Sv"

  system :metric do
    si_unit "Sv", aliases: ["sievert", "sieverts"]
  end

  system :centimetre_gram_second do
    unit "rem", value: "0.01 Sv", aliases: ["röntgen equivalent man", "roentgen equivalent man"]
  end
end
ElectricQuadrupoleMoment =

-*- warn_indent: true -*-

UnitMeasurements.build do
  primitive "C·m²"

  system :metric do
    si_unit "C·m²", aliases: ["C*m^2", "coulomb square meter", "coulomb square metre"]
  end

  system :centimetre_gram_second do
    unit "statC·cm²", value: "3.335641e-14 C·m²", aliases: ["statC*m^2", "statcoulomb square meter", "statcoulomb square metre"]
    unit "B", value: "1e-26 statC·cm²", aliases: ["buckingham", "buckinghams"]
  end
end

Class Method Summary collapse

Class Method Details

.build(&block) {|builder| ... } ⇒ Class

Creates a new unit group based on the provided block of instructions.

The build method allows you to define and create a custom unit group with units and their conversions. It takes a block of instructions as an argument, which is evaluated by an instance of UnitGroupBuilder.

Within the block, you can use various methods provided by UnitGroupBuilder to define units, group them into unit system, and set primitive unit of the unit group. These methods include primitive, system, si_unit, and unit.

The resulting unit group is encapsulated in a new subclass of Measurement. This subclass will have access to the defined units and their conversions through the unit_group class attribute.

This method provides a powerful way to create specialized unit groups tailored to specific measurement domains.

Examples:

UnitMeasurements.build do
  primitive "m"

  system :metric do
    si_unit "m", aliases: ["meter", "metre", "meters", "metres"]
  end

  system :imperial do
    unit "in", value: "25.4 mm", aliases: ['"', "inch", "inches"]
  end
end

Parameters:

  • block

    A block of instructions for defining units and their conversions within the unit group.

Yields:

  • (builder)

    A block that defines the units to be added to the unit group. The block takes a UnitGroupBuilder instance as a parameter.

Yield Parameters:

Yield Returns:

  • (UnitGroup)

    Returns an instance of UnitGroup containing the units and their conversions defined within the block.

Returns:

  • (Class)

    A new subclass of Measurement with the defined units and conversions.

See Also:

Author:

Since:

  • 1.0.0



65
66
67
68
69
70
71
72
73
74
75
76
# File 'lib/unit_measurements/base.rb', line 65

def build(&block)
  builder = UnitGroupBuilder.new
  builder.instance_eval(&block)

  Class.new(Measurement) do
    class << self
      attr_reader :unit_group
    end

    @unit_group = builder.build
  end
end