unit_measurements 3.8.0 → 4.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (57) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +26 -2
  3. data/Gemfile.lock +1 -1
  4. data/README.md +68 -80
  5. data/lib/unit_measurements/arithmetic.rb +4 -4
  6. data/lib/unit_measurements/base.rb +2 -3
  7. data/lib/unit_measurements/comparison.rb +2 -1
  8. data/lib/unit_measurements/conversion.rb +5 -5
  9. data/lib/unit_measurements/errors/primitive_unit_already_set_error.rb +11 -0
  10. data/lib/unit_measurements/formatter.rb +2 -2
  11. data/lib/unit_measurements/math.rb +5 -5
  12. data/lib/unit_measurements/measurement.rb +5 -11
  13. data/lib/unit_measurements/normalizer.rb +21 -28
  14. data/lib/unit_measurements/unit.rb +8 -5
  15. data/lib/unit_measurements/unit_group.rb +41 -7
  16. data/lib/unit_measurements/unit_group_builder.rb +10 -27
  17. data/lib/unit_measurements/unit_groups/acceleration.rb +8 -6
  18. data/lib/unit_measurements/unit_groups/all.rb +6 -6
  19. data/lib/unit_measurements/unit_groups/amount_of_substance.rb +4 -4
  20. data/lib/unit_measurements/unit_groups/angular_acceleration.rb +5 -5
  21. data/lib/unit_measurements/unit_groups/angular_velocity.rb +14 -14
  22. data/lib/unit_measurements/unit_groups/area.rb +8 -10
  23. data/lib/unit_measurements/unit_groups/density.rb +7 -8
  24. data/lib/unit_measurements/unit_groups/electric_charge.rb +7 -9
  25. data/lib/unit_measurements/unit_groups/electric_conductance.rb +18 -0
  26. data/lib/unit_measurements/unit_groups/electric_current.rb +6 -8
  27. data/lib/unit_measurements/unit_groups/electric_potential.rb +19 -0
  28. data/lib/unit_measurements/unit_groups/electrical_capacitance.rb +18 -0
  29. data/lib/unit_measurements/unit_groups/electrical_elastance.rb +13 -0
  30. data/lib/unit_measurements/unit_groups/electrical_inductance.rb +18 -0
  31. data/lib/unit_measurements/unit_groups/electrical_resistance.rb +19 -0
  32. data/lib/unit_measurements/unit_groups/force.rb +9 -11
  33. data/lib/unit_measurements/unit_groups/length.rb +7 -9
  34. data/lib/unit_measurements/unit_groups/luminous_intensity.rb +4 -4
  35. data/lib/unit_measurements/unit_groups/magnetic_field.rb +4 -4
  36. data/lib/unit_measurements/unit_groups/magnetic_flux.rb +6 -7
  37. data/lib/unit_measurements/unit_groups/magnetic_induction.rb +4 -6
  38. data/lib/unit_measurements/unit_groups/plane_angle.rb +11 -10
  39. data/lib/unit_measurements/unit_groups/quantity.rb +7 -5
  40. data/lib/unit_measurements/unit_groups/solid_angle.rb +7 -7
  41. data/lib/unit_measurements/unit_groups/sound_level.rb +4 -4
  42. data/lib/unit_measurements/unit_groups/temperature.rb +4 -4
  43. data/lib/unit_measurements/unit_groups/time.rb +13 -12
  44. data/lib/unit_measurements/unit_groups/velocity.rb +12 -16
  45. data/lib/unit_measurements/unit_groups/volume.rb +12 -14
  46. data/lib/unit_measurements/unit_groups/weight.rb +5 -5
  47. data/lib/unit_measurements/version.rb +1 -1
  48. data/units.md +72 -72
  49. metadata +9 -10
  50. data/lib/unit_measurements/unit_groups/capacitance.rb +0 -19
  51. data/lib/unit_measurements/unit_groups/conductance.rb +0 -19
  52. data/lib/unit_measurements/unit_groups/elastance.rb +0 -12
  53. data/lib/unit_measurements/unit_groups/inductance.rb +0 -19
  54. data/lib/unit_measurements/unit_groups/resistance.rb +0 -20
  55. data/lib/unit_measurements/unit_groups/voltage.rb +0 -21
  56. data/lib/unit_measurements/unit_methods.rb +0 -45
  57. data/lib/unit_measurements/unit_system.rb +0 -29
@@ -4,6 +4,21 @@
4
4
 
5
5
  module UnitMeasurements
6
6
  class Normalizer
7
+ EXPONENTS_SYMBOLS = {
8
+ "⁰" => "0",
9
+ "¹" => "1",
10
+ "²" => "2",
11
+ "³" => "3",
12
+ "⁴" => "4",
13
+ "⁵" => "5",
14
+ "⁶" => "6",
15
+ "⁷" => "7",
16
+ "⁸" => "8",
17
+ "⁹" => "9",
18
+ "⁺" => "+",
19
+ "⁻" => "-",
20
+ }.freeze
21
+
7
22
  FRACTIONS_SYMBOLS = {
8
23
  "¼" => "1/4",
9
24
  "½" => "1/2",
@@ -24,46 +39,24 @@ module UnitMeasurements
24
39
  "⅑" => "1/9",
25
40
  "⅒" => "1/10",
26
41
  "↉" => "0/3",
27
- "⁄" => "/"
28
42
  }.freeze
29
43
 
30
- EXPONENTS_SYMBOLS = {
31
- "⁰" => "0",
32
- "¹" => "1",
33
- "²" => "2",
34
- "³" => "3",
35
- "⁴" => "4",
36
- "⁵" => "5",
37
- "⁶" => "6",
38
- "⁷" => "7",
39
- "⁸" => "8",
40
- "⁹" => "9",
41
- "⁺" => "+",
42
- "⁻" => "-",
43
- }
44
-
45
- FRACTION_REGEX = /(#{FRACTIONS_SYMBOLS.keys.join("|")})/
46
- EXPONENT_REGEX = /([\d]+[Ee]?[+-]?)(#{EXPONENTS_SYMBOLS.keys.join("|")})/
47
- RATIO_REGEX = /([\d]+):([\d]+)/
44
+ EXPONENT_REGEX = /([\d]+[Ee]?[+-]?)(#{EXPONENTS_SYMBOLS.keys.join("|")})/.freeze
45
+ FRACTION_REGEX = /(#{FRACTIONS_SYMBOLS.keys.join("|")})/.freeze
46
+ RATIO_REGEX = /([\d]+):([\d]+)/.freeze
48
47
 
49
48
  class << self
50
49
  def normalize(string)
51
50
  string.dup.tap do |str|
52
- if str =~ Regexp.new(FRACTION_REGEX)
53
- FRACTIONS_SYMBOLS.each do |search, replace|
54
- str.gsub!(search) { " #{replace}" }
55
- end
56
- end
57
-
58
51
  if str =~ Regexp.new(EXPONENT_REGEX)
59
52
  EXPONENTS_SYMBOLS.each do |search, replace|
60
53
  str.gsub!(search) { "#{replace}" }
61
54
  end
62
55
  end
63
56
 
64
- if str =~ Regexp.new(RATIO_REGEX)
65
- str.gsub!(RATIO_REGEX) { "#{$1.to_i}/#{$2.to_i}" }
66
- end
57
+ str.gsub!(FRACTION_REGEX) { " #{FRACTIONS_SYMBOLS[$1]}" }
58
+
59
+ str.gsub!(RATIO_REGEX) { "#{$1.to_i}/#{$2.to_i}" }
67
60
 
68
61
  str.strip!
69
62
  end
@@ -6,20 +6,22 @@ require "set"
6
6
 
7
7
  module UnitMeasurements
8
8
  class Unit
9
- attr_reader :name, :value, :aliases, :unit_group
9
+ attr_reader :name, :value, :aliases, :system, :unit_group
10
10
 
11
- def initialize(name, value:, aliases:, unit_group: nil)
11
+ def initialize(name, value:, aliases:, system:, unit_group: nil)
12
12
  @name = name.to_s.freeze
13
13
  @value = value
14
- @aliases = Set.new(aliases.sort.map(&:to_s).map(&:freeze)).freeze
14
+ @aliases = Set.new(aliases.map(&:to_s).sort.map(&:freeze)).freeze
15
+ @system = system
15
16
  @unit_group = unit_group
16
17
  end
17
18
 
18
- def with(name: nil, value: nil, aliases: nil, unit_group: nil)
19
+ def with(name: nil, value: nil, aliases: nil, system: nil, unit_group: nil)
19
20
  self.class.new(
20
21
  (name || self.name),
21
22
  value: (value || self.value),
22
23
  aliases: (aliases || self.aliases),
24
+ system: (system || self.system),
23
25
  unit_group: (unit_group || self.unit_group)
24
26
  )
25
27
  end
@@ -42,12 +44,13 @@ module UnitMeasurements
42
44
 
43
45
  measurement_value, measurement_unit = parse_value(value)
44
46
  conversion_factor = unit_group.unit_for!(measurement_unit).conversion_factor
47
+
45
48
  conversion_factor * measurement_value
46
49
  end
47
50
 
48
51
  private
49
52
 
50
- SI_PREFIXES = [
53
+ SI_DECIMAL_PREFIXES = [
51
54
  ["q", %w(quecto), 1e-30],
52
55
  ["r", %w(ronto), 1e-27],
53
56
  ["y", %w(yocto), 1e-24],
@@ -4,17 +4,51 @@
4
4
 
5
5
  module UnitMeasurements
6
6
  class UnitGroup
7
- include UnitMethods
7
+ attr_reader :primitive, :units
8
8
 
9
- attr_reader :units, :systems
10
-
11
- def initialize(units, systems)
9
+ def initialize(primitive, units)
12
10
  @units = units.map { |unit| unit.with(unit_group: self) }
13
- @systems = systems
11
+ @primitive = unit_for!(primitive) if primitive
12
+ end
13
+
14
+ def unit_for(name)
15
+ unit_name_to_unit(name)
16
+ end
17
+
18
+ def unit_for!(name)
19
+ unit = unit_for(name)
20
+ raise UnitError, name unless unit
21
+
22
+ unit
23
+ end
24
+ alias_method :[], :unit_for!
25
+
26
+ def unit_with_name_and_aliases
27
+ units.each_with_object({}) do |unit, hash|
28
+ unit.names.each { |name| hash[name.to_s] = unit }
29
+ end
30
+ end
31
+
32
+ def unit_names
33
+ units.map(&:name).sort
34
+ end
35
+
36
+ def unit_names_with_aliases
37
+ units.flat_map(&:names).sort
38
+ end
39
+
40
+ def unit_name_to_unit(name)
41
+ unit_with_name_and_aliases[name.to_s]
42
+ end
43
+
44
+ def defined?(name)
45
+ unit = unit_for(name)
46
+
47
+ unit ? unit.name == name.to_s : false
14
48
  end
15
49
 
16
- def system_for(system_name)
17
- @systems.find { |system| system.name.to_s == system_name.to_s }
50
+ def unit_or_alias?(name)
51
+ !!unit_for(name)
18
52
  end
19
53
  end
20
54
  end
@@ -7,7 +7,7 @@ module UnitMeasurements
7
7
  attr_reader :units
8
8
 
9
9
  def initialize
10
- @units, @systems = [], []
10
+ @units = []
11
11
  end
12
12
 
13
13
  def unit(name, value: 1.0, aliases: [])
@@ -19,19 +19,20 @@ module UnitMeasurements
19
19
  end
20
20
 
21
21
  def build
22
- UnitGroup.new(@units, @systems)
22
+ UnitGroup.new(@primitive, @units)
23
23
  end
24
24
 
25
25
  def system(system_name, &block)
26
- @current_system = find_or_create_system(system_name)
26
+ @system = system_name
27
27
  instance_eval(&block) if block_given?
28
- @current_system.set_primitive(@current_primitive) if @current_primitive
29
28
  ensure
30
- @current_primitive, @current_system = nil, nil
29
+ @system = nil
31
30
  end
32
31
 
33
32
  def primitive(primitive)
34
- @current_primitive = primitive
33
+ raise PrimitiveUnitAlreadySetError if @primitive
34
+
35
+ @primitive = primitive
35
36
  end
36
37
 
37
38
  private
@@ -39,7 +40,7 @@ module UnitMeasurements
39
40
  def build_si_units(name, value:, aliases:)
40
41
  si_units = [build_unit(name, value: value, aliases: aliases)]
41
42
 
42
- Unit::SI_PREFIXES.each do |short_prefix, long_prefix, multiplier|
43
+ Unit::SI_DECIMAL_PREFIXES.each do |short_prefix, long_prefix, multiplier|
43
44
  si_aliases = long_prefix.product(aliases.to_a).flat_map do |prefix, unit|
44
45
  aliases.map { |alias_unit| prefix + alias_unit.to_s }
45
46
  end
@@ -50,9 +51,8 @@ module UnitMeasurements
50
51
  end
51
52
 
52
53
  def build_unit(name, value:, aliases:)
53
- unit = Unit.new(name, value: value, aliases: aliases)
54
+ unit = Unit.new(name, value: value, aliases: aliases, system: @system)
54
55
  check_for_duplicate_unit_names!(unit)
55
- add_unit_to_system(unit)
56
56
 
57
57
  unit
58
58
  end
@@ -61,25 +61,8 @@ module UnitMeasurements
61
61
  names = @units.flat_map(&:names)
62
62
 
63
63
  if names.any? { |name| unit.names.include?(name) }
64
- raise UnitAlreadyDefinedError.new(unit.name)
65
- end
66
- end
67
-
68
- def find_system(name)
69
- @systems.find { |system| system.name.to_s == name.to_s }
70
- end
71
-
72
- def find_or_create_system(system_name)
73
- system = find_system(system_name)
74
- unless system
75
- system = UnitSystem.new(system_name)
76
- @systems << system
64
+ raise UnitAlreadyDefinedError, unit.name
77
65
  end
78
- system
79
- end
80
-
81
- def add_unit_to_system(unit)
82
- @current_system.add_unit(unit) if @current_system
83
66
  end
84
67
  end
85
68
  end
@@ -3,19 +3,21 @@
3
3
  # -*- warn_indent: true -*-
4
4
 
5
5
  UnitMeasurements::Acceleration = UnitMeasurements.build do
6
- system :metric do
7
- primitive :"m/s²"
6
+ primitive "m/s²"
8
7
 
9
- 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"]
8
+ system :metric do
9
+ 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"]
10
10
  end
11
11
 
12
12
  system :imperial do
13
- unit :"in/s²", value: "0.0254 m/s²", aliases: [:"in/s^2", :"in·s⁻²", :"inch per second squared", :"inches per second squared"]
13
+ unit "in/s²", value: "0.0254 m/s²", aliases: ["in/s^2", "in·s⁻²", "inch per second squared", "inches per second squared"]
14
14
  end
15
15
 
16
16
  system :foot_pound_second do
17
- unit :"ft/s²", value: "0.3048 m/s²", aliases: [:"ft/s^2", :"ft·s⁻²", :"foot per second squared", :"feet per second squared"]
17
+ unit "ft/s²", value: "0.3048 m/s²", aliases: ["ft/s^2", "ft·s⁻²", "foot per second squared", "feet per second squared"]
18
18
  end
19
19
 
20
- unit :"Kn/s", value: "0.5144444 m/s²", aliases: [:"knot per second", :"knots per second"]
20
+ system :meteorology_aviation_maritime do
21
+ unit "Kn/s", value: "0.5144444 m/s²", aliases: ["knot per second", "knots per second"]
22
+ end
21
23
  end
@@ -22,16 +22,16 @@ require_relative "acceleration"
22
22
  require_relative "angular_velocity"
23
23
  require_relative "angular_acceleration"
24
24
  require_relative "force"
25
- require_relative "voltage"
25
+ require_relative "electric_potential"
26
26
  require_relative "electric_charge"
27
- require_relative "capacitance"
28
- require_relative "elastance"
29
- require_relative "resistance"
30
- require_relative "conductance"
27
+ require_relative "electric_conductance"
28
+ require_relative "electrical_capacitance"
29
+ require_relative "electrical_elastance"
30
+ require_relative "electrical_resistance"
31
+ require_relative "electrical_inductance"
31
32
  require_relative "magnetic_flux"
32
33
  require_relative "magnetic_induction"
33
34
  require_relative "magnetic_field"
34
- require_relative "inductance"
35
35
 
36
36
  ## Other units
37
37
 
@@ -3,11 +3,11 @@
3
3
  # -*- warn_indent: true -*-
4
4
 
5
5
  UnitMeasurements::AmountOfSubstance = UnitMeasurements.build do
6
- system :cgs do
7
- primitive :mol
6
+ primitive "mol"
8
7
 
9
- si_unit :mol, aliases: [:mole, :moles]
8
+ system :metric do
9
+ si_unit "mol", aliases: ["mole", "moles"]
10
10
  end
11
11
 
12
- unit :NA, value: "1.6605389210322e-24 mol", aliases: [:"avogadro constant"]
12
+ unit "NA", value: "1.6605389210322e-24 mol", aliases: ["avogadro constant"]
13
13
  end
@@ -3,12 +3,12 @@
3
3
  # -*- warn_indent: true -*-
4
4
 
5
5
  UnitMeasurements::AngularAcceleration = UnitMeasurements.build do
6
- system :metric do
7
- primitive :"rad/s²"
6
+ primitive "rad/s²"
8
7
 
9
- si_unit :"rad/s²", aliases: [:"rad/s^2", :"rad·s⁻²", :"radian per second squared", :"radians per second squared"]
10
- unit :"gon/s²", value: [(Math::PI / 200), :"rad/s²"], aliases: [:"gon/s^2", :"ᵍ/s²", :"gon·s⁻²", :"gradian per second squared", :"gradians per second squared"]
8
+ system :metric do
9
+ si_unit "rad/s²", aliases: ["rad/s^2", "rad·s⁻²", "radian per second squared", "radians per second squared"]
10
+ unit "gon/s²", value: [(Math::PI / 200), "rad/s²"], aliases: ["gon/s^2", "ᵍ/s²", "gon·s⁻²", "gradian per second squared", "gradians per second squared"]
11
11
  end
12
12
 
13
- unit :"deg/s²", value: [(Math::PI / 180), :"rad/s²"], aliases: [:"deg/s^2", :"°/s²", :"deg·s⁻²", :"degree per second squared", :"degrees per second squared"]
13
+ unit "deg/s²", value: [(Math::PI / 180), "rad/s²"], aliases: ["deg/s^2", "°/s²", "deg·s⁻²", "degree per second squared", "degrees per second squared"]
14
14
  end
@@ -3,23 +3,23 @@
3
3
  # -*- warn_indent: true -*-
4
4
 
5
5
  UnitMeasurements::AngularVelocity = UnitMeasurements.build do
6
- system :metric do
7
- primitive :"rad/s"
6
+ primitive "rad/s"
8
7
 
9
- unit :"rad/s", aliases: [:"rad·s⁻¹", :"radian per second", :"radians per second"]
10
- unit :"rad/min", value: "1/60 rad/s", aliases: [:"rad·min⁻¹", :"radian per minute", :"radians per minute"]
11
- unit :"rad/h", value: "1/60 rad/min", aliases: [:"rad·h⁻¹", :"radian per hour", :"radians per hour"]
8
+ system :metric do
9
+ unit "rad/s", aliases: ["rad·s⁻¹", "radian per second", "radians per second"]
10
+ unit "rad/min", value: "1/60 rad/s", aliases: ["rad·min⁻¹", "radian per minute", "radians per minute"]
11
+ unit "rad/h", value: "1/60 rad/min", aliases: ["rad·h⁻¹", "radian per hour", "radians per hour"]
12
12
 
13
- unit :"gon/s", value: [(Math::PI / 200), :"rad/s"], aliases: [:"ᵍ/s", :"gon·s⁻¹", :"gradian per second", :"gradians per second"]
14
- unit :"gon/min", value: "1/60 gon/s", aliases: [:"ᵍ/min", :"gon·min⁻¹", :"gradian per minute", :"gradians per minute"]
15
- unit :"gon/h", value: "1/60 gon/min", aliases: [:"ᵍ/h", :"gon·h⁻¹", :"gradian per hour", :"gradians per hour"]
13
+ unit "gon/s", value: [(Math::PI / 200), "rad/s"], aliases: ["ᵍ/s", "gon·s⁻¹", "gradian per second", "gradians per second"]
14
+ unit "gon/min", value: "1/60 gon/s", aliases: ["ᵍ/min", "gon·min⁻¹", "gradian per minute", "gradians per minute"]
15
+ unit "gon/h", value: "1/60 gon/min", aliases: ["ᵍ/h", "gon·h⁻¹", "gradian per hour", "gradians per hour"]
16
16
  end
17
17
 
18
- unit :"deg/s", value: [(Math::PI / 180), :"rad/s"], aliases: [:"°/s", :"deg·s⁻¹", :"degree per second", :"degrees per second"]
19
- unit :"deg/min", value: "1/60 deg/s", aliases: [:"°/min", :"deg·min⁻¹", :"degree per minute", :"degrees per minute"]
20
- unit :"deg/h", value: "1/60 deg/min", aliases: [:"°/h", :"deg·h⁻¹", :"degree per hour", :"degrees per hour"]
18
+ unit "deg/s", value: [(Math::PI / 180), "rad/s"], aliases: ["°/s", "deg·s⁻¹", "degree per second", "degrees per second"]
19
+ unit "deg/min", value: "1/60 deg/s", aliases: ["°/min", "deg·min⁻¹", "degree per minute", "degrees per minute"]
20
+ unit "deg/h", value: "1/60 deg/min", aliases: ["°/h", "deg·h⁻¹", "degree per hour", "degrees per hour"]
21
21
 
22
- unit :"rev/s", value: "360 deg/s", aliases: [:"rev·s⁻¹", :"revolution per second", :"revolutions per second"]
23
- unit :"rev/min", value: "1/60 rev/s", aliases: [:"rev·min⁻¹", :"revolution per minute", :"revolutions per minute"]
24
- unit :"rev/h", value: "1/60 rev/min", aliases: [:"rev·h⁻¹", :"revolution per hour", :"revolutions per hour"]
22
+ unit "rev/s", value: "360 deg/s", aliases: ["rev·s⁻¹", "revolution per second", "revolutions per second"]
23
+ unit "rev/min", value: "1/60 rev/s", aliases: ["rev·min⁻¹", "revolution per minute", "revolutions per minute"]
24
+ unit "rev/h", value: "1/60 rev/min", aliases: ["rev·h⁻¹", "revolution per hour", "revolutions per hour"]
25
25
  end
@@ -3,19 +3,17 @@
3
3
  # -*- warn_indent: true -*-
4
4
 
5
5
  UnitMeasurements::Area = UnitMeasurements.build do
6
- system :metric do
7
- primitive :m²
6
+ primitive "m²"
8
7
 
9
- unit :m², aliases: [:"m^2", :"sq m", :"square meter", :"square meters", :"square metre", :"square metres"]
10
- unit :km², value: "1e+6 m²", aliases: [:"km^2", :"sq km", :"square kilometer", :"square kilometers", :"square kilometre", :"square kilometres"]
8
+ system :metric do
9
+ unit "m²", aliases: ["m^2", "sq m", "square meter", "square meters", "square metre", "square metres"]
10
+ unit "km²", value: "1e+6 m²", aliases: ["km^2", "sq km", "square kilometer", "square kilometers", "square kilometre", "square kilometres"]
11
11
  end
12
12
 
13
13
  system :imperial do
14
- primitive :in²
15
-
16
- unit :in², value: "0.00064516 m²", aliases: [:"in^2", :"sq in", :"square inch", :"square inches"]
17
- unit :ft², value: "144 in²", aliases: [:"ft^2", :"sq ft", :"square foot", :"square feet"]
18
- unit :yd², value: "9 ft²", aliases: [:"yd^2", :"sq yd", :"square yard", :"square yards"]
19
- unit :mi², value: "3097600 yd²", aliases: [:"mi^2", :"sq mi", :"square mile", :"square miles"]
14
+ unit "in²", value: "0.00064516 m²", aliases: ["in^2", "sq in", "square inch", "square inches"]
15
+ unit "ft²", value: "144 in²", aliases: ["ft^2", "sq ft", "square foot", "square feet"]
16
+ unit "yd²", value: "9 ft²", aliases: ["yd^2", "sq yd", "square yard", "square yards"]
17
+ unit "mi²", value: "3097600 yd²", aliases: ["mi^2", "sq mi", "square mile", "square miles"]
20
18
  end
21
19
  end
@@ -3,15 +3,14 @@
3
3
  # -*- warn_indent: true -*-
4
4
 
5
5
  UnitMeasurements::Density = UnitMeasurements.build do
6
- system :metric do
7
- primitive :"g/m³"
8
-
9
- 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"]
6
+ primitive "kg/m³"
10
7
 
11
- unit :"g/l", value: "1 kg/m³", aliases: [:"g·l⁻¹", :"gram per liter", :"grams per liter", :"gramme per litre", :"grammes per litre"]
12
- unit :"g/ml", value: "1000 g/l", aliases: [:"g·ml⁻¹", :"gram per milliliter", :"grams per milliliter", :"gramme per millilitre", :"grammes per millilitre"]
8
+ system :metric do
9
+ unit "g/", aliases: ["g/m^3", "g·m⁻³", "gram per cubic meter", "grams per cubic meter", "gramme per cubic metre", "grammes per cubic metre"]
10
+ 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"]
13
11
 
14
- unit :"kg/", 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"]
15
- unit :"kg/l", value: "1e+6 g/", aliases: [:"kg·l⁻¹", :"kilogram per liter", :"kilograms per liter", :"kilogramme per litre", :"kilogrammes per litre"]
12
+ unit "g/l", value: "1 kg/m³", aliases: ["g·l⁻¹", "gram per liter", "grams per liter", "gramme per litre", "grammes per litre"]
13
+ unit "g/ml", value: "1000 g/l", aliases: ["g·ml⁻¹", "gram per milliliter", "grams per milliliter", "gramme per millilitre", "grammes per millilitre"]
14
+ unit "kg/l", value: "1e+6 g/m³", aliases: ["kg·l⁻¹", "kilogram per liter", "kilograms per liter", "kilogramme per litre", "kilogrammes per litre"]
16
15
  end
17
16
  end
@@ -3,18 +3,16 @@
3
3
  # -*- warn_indent: true -*-
4
4
 
5
5
  UnitMeasurements::ElectricCharge = UnitMeasurements.build do
6
- system :metric do
7
- primitive :C
6
+ primitive "C"
8
7
 
9
- si_unit :C, aliases: [:coulomb, :coulombs]
8
+ system :metric do
9
+ si_unit "C", aliases: ["coulomb", "coulombs"]
10
10
  end
11
11
 
12
12
  system :centimetre_gram_second do
13
- primitive :statC
14
-
15
- unit :Fr, value: "3.335641e-10 C", aliases: [:franklin, :franklins]
16
- unit :Fd, value: "96485.3377164 C", aliases: [:faraday, :faradays]
17
- unit :abC, value: "10 C", aliases: [:abcoulomb, :abcoulombs]
18
- unit :statC, value: "3.335641e-10 C", aliases: [:statcoulomb, :statcoulombs]
13
+ unit "Fr", value: "3.335641e-10 C", aliases: ["franklin", "franklins"]
14
+ unit "Fd", value: "96485.3377164 C", aliases: ["faraday", "faradays"]
15
+ unit "abC", value: "10 C", aliases: ["abcoulomb", "abcoulombs"]
16
+ unit "statC", value: "3.335641e-10 C", aliases: ["statcoulomb", "statcoulombs"]
19
17
  end
20
18
  end
@@ -0,0 +1,18 @@
1
+ # -*- encoding: utf-8 -*-
2
+ # -*- frozen_string_literal: true -*-
3
+ # -*- warn_indent: true -*-
4
+
5
+ UnitMeasurements::ElectricConductance = UnitMeasurements.build do
6
+ primitive "S"
7
+
8
+ system :metric do
9
+ si_unit "S", aliases: ["℧", "Ω⁻¹", "siemens", "mho", "mhos"]
10
+
11
+ unit "A/V", value: "1 S", aliases: ["A·V⁻¹", "amp/volt", "amps/volt", "ampere/volt", "amperes/volt", "ampere per volt", "amperes per volt"]
12
+ end
13
+
14
+ system :centimetre_gram_second do
15
+ unit "abS", value: "1e+9 S", aliases: ["ab℧", "absiemens", "abmho", "abmhos"]
16
+ unit "statS", value: "1.112347e-12 S", aliases: ["stat℧", "statsiemens", "statmho", "statmhos"]
17
+ end
18
+ end
@@ -3,17 +3,15 @@
3
3
  # -*- warn_indent: true -*-
4
4
 
5
5
  UnitMeasurements::ElectricCurrent = UnitMeasurements.build do
6
- system :metric do
7
- primitive :A
6
+ primitive "A"
8
7
 
9
- si_unit :A, aliases: [:amp, :ampere, :amperes]
8
+ system :metric do
9
+ si_unit "A", aliases: ["amp", "ampere", "amperes"]
10
10
  end
11
11
 
12
12
  system :centimetre_gram_second do
13
- primitive :abA
14
-
15
- unit :Bi, value: "10 A", aliases: [:biot, :biots]
16
- unit :abA, value: "10 A", aliases: [:abampere, :abamperes]
17
- unit :statA, value: "3.33564e-10 A", aliases: [:statampere, :statamperes]
13
+ unit "Bi", value: "10 A", aliases: ["biot", "biots"]
14
+ unit "abA", value: "10 A", aliases: ["abampere", "abamperes"]
15
+ unit "statA", value: "3.33564e-10 A", aliases: ["statampere", "statamperes"]
18
16
  end
19
17
  end
@@ -0,0 +1,19 @@
1
+ # -*- encoding: utf-8 -*-
2
+ # -*- frozen_string_literal: true -*-
3
+ # -*- warn_indent: true -*-
4
+
5
+ UnitMeasurements::ElectricPotential = UnitMeasurements.build do
6
+ primitive "V"
7
+
8
+ system :metric do
9
+ si_unit "V", aliases: ["volt", "volts"]
10
+
11
+ unit "W/A", value: "1 V", aliases: ["W·A⁻¹", "watt per ampere", "watts per ampere"]
12
+ unit "J/C", value: "1 V", aliases: ["J·C⁻¹", "joule per coulomb", "joules per coulomb"]
13
+ end
14
+
15
+ system :centimetre_gram_second do
16
+ unit "abV", value: "1e-8 V", aliases: ["abvolt", "abvolts"]
17
+ unit "statV", value: "299.792458 V", aliases: ["statvolt", "statvolts"]
18
+ end
19
+ end
@@ -0,0 +1,18 @@
1
+ # -*- encoding: utf-8 -*-
2
+ # -*- frozen_string_literal: true -*-
3
+ # -*- warn_indent: true -*-
4
+
5
+ UnitMeasurements::ElectricalCapacitance = UnitMeasurements.build do
6
+ primitive "F"
7
+
8
+ system :metric do
9
+ si_unit "F", aliases: ["farad", "farads"]
10
+
11
+ unit "C/V", value: "1 F", aliases: ["C·V⁻¹", "coulomb/volt", "coulombs/volt", "coulomb per volt", "coulombs per volt"]
12
+ end
13
+
14
+ system :centimetre_gram_second do
15
+ unit "abF", value: "1e+9 F", aliases: ["abfarad", "abfarads"]
16
+ unit "statF", value: "1.1127e-12 F", aliases: ["statfarad", "statfarads"]
17
+ end
18
+ end
@@ -0,0 +1,13 @@
1
+ # -*- encoding: utf-8 -*-
2
+ # -*- frozen_string_literal: true -*-
3
+ # -*- warn_indent: true -*-
4
+
5
+ UnitMeasurements::ElectricalElastance = UnitMeasurements.build do
6
+ primitive "D"
7
+
8
+ system :metric do
9
+ si_unit "D", aliases: ["F⁻¹", "daraf", "darafs", "reciprocal farad", "reciprocal farads"]
10
+
11
+ unit "V/C", value: "1 D", aliases: ["V·C⁻¹", "volt/coulomb", "volts/coulomb", "volt per coulomb", "volts per coulomb"]
12
+ end
13
+ end
@@ -0,0 +1,18 @@
1
+ # -*- encoding: utf-8 -*-
2
+ # -*- frozen_string_literal: true -*-
3
+ # -*- warn_indent: true -*-
4
+
5
+ UnitMeasurements::ElectricalInductance = UnitMeasurements.build do
6
+ primitive "H"
7
+
8
+ system :metric do
9
+ si_unit "H", aliases: ["henry", "henries"]
10
+
11
+ unit "Wb/A", value: "1 H", aliases: ["Wb·A⁻¹", "weber per ampere", "webers per ampere"]
12
+ end
13
+
14
+ system :centimetre_gram_second do
15
+ unit "abH", value: "1e-9 H", aliases: ["abhenry", "abhenries"]
16
+ unit "statH", value: "8.98755178736818e+11 H", aliases: ["stathenry", "stathenries"]
17
+ end
18
+ end
@@ -0,0 +1,19 @@
1
+ # -*- encoding: utf-8 -*-
2
+ # -*- frozen_string_literal: true -*-
3
+ # -*- warn_indent: true -*-
4
+
5
+ UnitMeasurements::ElectricalResistance = UnitMeasurements.build do
6
+ primitive "Ω"
7
+
8
+ system :metric do
9
+ si_unit "Ω", aliases: ["ω", "ohm", "ohms", "reciprocal siemens"]
10
+
11
+ unit "S", value: "1 Ω", aliases: ["siemens", "mho", "mhos"]
12
+ unit "V/A", value: "1 Ω", aliases: ["V·A⁻¹", "volt/amp", "volts/amp", "volt/ampere", "volts/ampere", "volt per ampere", "volts per ampere"]
13
+ end
14
+
15
+ system :centimetre_gram_second do
16
+ unit "abΩ", value: "1e-9 Ω", aliases: ["abω", "abohm", "abohms"]
17
+ unit "statΩ", value: "8.98755178737e+11 Ω", aliases: ["statω", "statohm", "statohms"]
18
+ end
19
+ end