unit_measurements 3.8.0 → 4.0.0

Sign up to get free protection for your applications and to get access to all the features.
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