unitsml 0.5.1 → 0.6.1

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 (75) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/rake.yml +8 -0
  3. data/.github/workflows/release.yml +7 -1
  4. data/.gitmodules +0 -3
  5. data/.rubocop.yml +18 -0
  6. data/.rubocop_todo.yml +495 -0
  7. data/Gemfile +8 -3
  8. data/Rakefile +3 -1
  9. data/bin/console +1 -0
  10. data/docs/README.adoc +2 -2
  11. data/lib/unitsml/dimension.rb +48 -34
  12. data/lib/unitsml/errors/base_error.rb +8 -0
  13. data/lib/unitsml/errors/plurimath_load_error.rb +1 -1
  14. data/lib/unitsml/errors.rb +8 -0
  15. data/lib/unitsml/extender.rb +16 -11
  16. data/lib/unitsml/fenced.rb +28 -8
  17. data/lib/unitsml/fenced_numeric.rb +13 -0
  18. data/lib/unitsml/formula.rb +35 -26
  19. data/lib/unitsml/intermediate_exp_rules.rb +68 -17
  20. data/lib/unitsml/model/dimension.rb +4 -14
  21. data/lib/unitsml/model/dimension_quantities/quantity.rb +2 -0
  22. data/lib/unitsml/model/dimension_quantities.rb +21 -0
  23. data/lib/unitsml/model/prefix.rb +4 -8
  24. data/lib/unitsml/model/prefixes/name.rb +5 -4
  25. data/lib/unitsml/model/prefixes/symbol.rb +3 -2
  26. data/lib/unitsml/model/prefixes.rb +10 -0
  27. data/lib/unitsml/model/quantities/name.rb +4 -3
  28. data/lib/unitsml/model/quantities.rb +9 -0
  29. data/lib/unitsml/model/quantity.rb +4 -6
  30. data/lib/unitsml/model/unit.rb +4 -9
  31. data/lib/unitsml/model/units/enumerated_root_unit.rb +1 -0
  32. data/lib/unitsml/model/units/name.rb +4 -3
  33. data/lib/unitsml/model/units/root_units.rb +3 -2
  34. data/lib/unitsml/model/units/symbol.rb +5 -2
  35. data/lib/unitsml/model/units/system.rb +4 -3
  36. data/lib/unitsml/model/units.rb +13 -0
  37. data/lib/unitsml/model.rb +15 -0
  38. data/lib/unitsml/namespace.rb +8 -0
  39. data/lib/unitsml/number.rb +79 -0
  40. data/lib/unitsml/parse.rb +31 -19
  41. data/lib/unitsml/parser.rb +5 -6
  42. data/lib/unitsml/prefix.rb +11 -9
  43. data/lib/unitsml/sqrt.rb +3 -3
  44. data/lib/unitsml/transform.rb +117 -55
  45. data/lib/unitsml/unit.rb +43 -33
  46. data/lib/unitsml/unitsdb/dimension.rb +5 -3
  47. data/lib/unitsml/unitsdb/dimensions.rb +6 -4
  48. data/lib/unitsml/unitsdb/prefixes.rb +0 -2
  49. data/lib/unitsml/unitsdb/quantities.rb +0 -2
  50. data/lib/unitsml/unitsdb/units.rb +6 -4
  51. data/lib/unitsml/unitsdb.rb +17 -23
  52. data/lib/unitsml/utility.rb +91 -42
  53. data/lib/unitsml/version.rb +3 -1
  54. data/lib/unitsml.rb +56 -38
  55. data/unitsml.gemspec +24 -19
  56. metadata +29 -35
  57. data/lib/unitsml/error.rb +0 -8
  58. data/unitsdb/LICENSE.md +0 -53
  59. data/unitsdb/README.adoc +0 -1071
  60. data/unitsdb/RELEASE-NOTES.adoc +0 -269
  61. data/unitsdb/dimensions.yaml +0 -1512
  62. data/unitsdb/prefixes.yaml +0 -774
  63. data/unitsdb/quantities.yaml +0 -3113
  64. data/unitsdb/scales.yaml +0 -97
  65. data/unitsdb/schemas/README.md +0 -159
  66. data/unitsdb/schemas/dimensions-schema.yaml +0 -157
  67. data/unitsdb/schemas/prefixes-schema.yaml +0 -159
  68. data/unitsdb/schemas/quantities-schema.yaml +0 -120
  69. data/unitsdb/schemas/scales-schema.yaml +0 -109
  70. data/unitsdb/schemas/unit_systems-schema.yaml +0 -120
  71. data/unitsdb/schemas/units-schema.yaml +0 -219
  72. data/unitsdb/spec/units_spec.rb +0 -20
  73. data/unitsdb/unit_systems.yaml +0 -74
  74. data/unitsdb/units.yaml +0 -13101
  75. data/unitsdb/validate_schemas.rb +0 -208
@@ -3,138 +3,200 @@
3
3
  require "parslet"
4
4
  module Unitsml
5
5
  class Transform < Parslet::Transform
6
- rule(sqrt: simple(:sqrt)) { Sqrt.new(sqrt) }
7
- rule(units: simple(:unit)) { Unit.new(unit.to_s) }
8
- rule(prefixes: simple(:prefix)) { Prefix.new(prefix.to_s) }
9
- rule(dimensions: simple(:dimension)) { Dimension.new(dimension.to_s) }
10
- rule(intermediate_exp: simple(:int_exp)) { int_exp }
6
+ rule(sqrt: simple(:sqrt)) { Sqrt.new(sqrt) }
7
+ rule(unit: simple(:unit)) { Unit.new(unit.to_s) }
8
+ rule(dimension: simple(:dimension)) { Dimension.new(dimension.to_s) }
9
+ rule(prefix: simple(:prefix)) { Prefix.new(prefix.to_s) }
10
+ rule(integer: simple(:integer)) { Number.new(integer.to_s) }
11
+ rule(int_exp: simple(:int_exp)) { int_exp }
12
+ rule(implicit_extended: simple(:implicit_extended)) { implicit_extended }
11
13
 
12
- rule(units: simple(:unit),
13
- integer: simple(:integer)) do
14
- Unit.new(unit.to_s, integer.to_s)
14
+ rule(int_exp: simple(:int_exp),
15
+ sequence: simple(:sequence)) do
16
+ Formula.new([int_exp, sequence])
17
+ end
18
+
19
+ rule(first_int_exp_set: simple(:first_set),
20
+ second_set: simple(:second_set)) do
21
+ Formula.new([Utility.set_to_fence(first_set), second_set])
22
+ end
23
+
24
+ rule(first_int_exp_set: simple(:first_set),
25
+ second_int_exp_set: simple(:second_set)) do
26
+ Formula.new(
27
+ [Utility.set_to_fence(first_set), Utility.set_to_fence(second_set)],
28
+ )
29
+ end
30
+
31
+ rule(first_set: simple(:first_set),
32
+ second_set: simple(:second_set)) do
33
+ Formula.new(
34
+ [
35
+ first_set,
36
+ second_set,
37
+ ],
38
+ )
15
39
  end
16
40
 
17
- rule(dimensions: simple(:dimension),
18
- integer: simple(:integer)) do
19
- Dimension.new(dimension.to_s, integer.to_s)
41
+ rule(first_set: simple(:first_set),
42
+ second_int_exp_set: simple(:second_set)) do
43
+ Formula.new(
44
+ [
45
+ first_set,
46
+ Utility.set_to_fence(second_set),
47
+ ],
48
+ )
20
49
  end
21
50
 
22
- rule(prefixes: simple(:prefix),
23
- units: simple(:unit)) do
51
+ rule(prefix: simple(:prefix),
52
+ unit: simple(:unit)) do
24
53
  Unit.new(unit.to_s, prefix: Prefix.new(prefix.to_s))
25
54
  end
26
55
 
27
- rule(prefixes: simple(:prefix),
28
- units: simple(:unit),
29
- integer: simple(:integer)) do
30
- prefix_obj = Prefix.new(prefix.to_s)
31
- Unit.new(unit.to_s, integer.to_s, prefix: prefix_obj)
56
+ rule(unit: simple(:unit),
57
+ power_numerator: simple(:power_numerator)) do
58
+ Unit.new(unit.to_s, power_numerator)
32
59
  end
33
60
 
34
- rule(open_parenthesis: simple(:open_paren),
35
- int_exp: simple(:exp),
36
- close_parenthesis: simple(:close_paren)) do
37
- Fenced.new(open_paren.to_s, exp, close_paren.to_s)
61
+ rule(dimension: simple(:dimension),
62
+ power_numerator: simple(:power_numerator)) do
63
+ Dimension.new(dimension.to_s, power_numerator)
38
64
  end
39
65
 
40
- rule(open_parenthesis: simple(:open_paren),
41
- int_exp: simple(:exp),
42
- close_parenthesis: simple(:close_paren),
43
- sequence: sequence(:sequence)) do
66
+ rule(prefix: simple(:prefix),
67
+ unit: simple(:unit),
68
+ power_numerator: simple(:power_numerator)) do
69
+ Unit.new(unit.to_s, power_numerator, prefix: Prefix.new(prefix.to_s))
70
+ end
71
+
72
+ rule(first_set: simple(:first_set),
73
+ extender: simple(:extender),
74
+ second_set: simple(:second_set)) do
44
75
  Formula.new(
45
76
  [
46
- Fenced.new(open_paren.to_s, exp, close_paren.to_s),
47
- sequence,
77
+ first_set,
78
+ Extender.new(extender.to_s),
79
+ second_set,
48
80
  ],
49
81
  )
50
82
  end
51
83
 
52
- rule(intermediate_exp: simple(:intermediate_exp),
84
+ rule(implicit_extended: simple(:implicit_extended),
53
85
  extender: simple(:extender),
54
86
  sequence: simple(:sequence)) do
55
87
  Formula.new(
56
88
  [
57
- intermediate_exp,
89
+ implicit_extended,
58
90
  Extender.new(extender.to_s),
59
91
  sequence,
60
92
  ],
61
93
  )
62
94
  end
63
95
 
64
- rule(prefixes: simple(:prefix),
65
- units: simple(:unit),
66
- integer: simple(:integer),
96
+ rule(int_exp: simple(:int_exp),
67
97
  extender: simple(:extender),
68
- sequence: simple(:sequence),) do
69
- prefix_obj = Prefix.new(prefix.to_s)
70
- unit_object = Unit.new(unit.to_s, integer.to_s, prefix: prefix_obj)
98
+ sequence: simple(:sequence)) do
71
99
  Formula.new(
72
100
  [
73
- unit_object,
101
+ int_exp,
74
102
  Extender.new(extender.to_s),
75
103
  sequence,
76
104
  ],
77
105
  )
78
106
  end
79
107
 
80
- rule(prefixes: simple(:prefix),
81
- units: simple(:unit),
108
+ rule(unit: simple(:unit),
82
109
  extender: simple(:extender),
83
110
  sequence: simple(:sequence)) do
84
111
  Formula.new(
85
112
  [
86
- Unit.new(unit.to_s, prefix: Prefix.new(prefix.to_s)),
113
+ Unit.new(unit.to_s),
87
114
  Extender.new(extender.to_s),
88
115
  sequence,
89
116
  ],
90
117
  )
91
118
  end
92
119
 
93
- rule(units: simple(:unit),
120
+ rule(dimension: simple(:dimension),
94
121
  extender: simple(:extender),
95
122
  sequence: simple(:sequence)) do
96
123
  Formula.new(
97
124
  [
98
- Unit.new(unit.to_s),
125
+ Dimension.new(dimension.to_s),
99
126
  Extender.new(extender.to_s),
100
127
  sequence,
101
128
  ],
102
129
  )
103
130
  end
104
131
 
105
- rule(units: simple(:unit),
132
+ rule(open_paren: simple(:open_paren),
133
+ int_exp: simple(:int_exp),
134
+ close_paren: simple(:close_paren)) do
135
+ Fenced.new(
136
+ open_paren.to_s,
137
+ int_exp,
138
+ close_paren.to_s,
139
+ )
140
+ end
141
+
142
+ rule(open_paren: simple(:open_paren),
106
143
  integer: simple(:integer),
107
- extender: simple(:extender),
144
+ close_paren: simple(:close_paren)) do
145
+ Fenced.new(
146
+ open_paren.to_s,
147
+ Number.new(integer.to_s),
148
+ close_paren.to_s,
149
+ )
150
+ end
151
+
152
+ rule(unit: simple(:unit),
153
+ power_numerator: simple(:power_numerator),
154
+ extender: simple(:ext),
108
155
  sequence: simple(:sequence)) do
109
156
  Formula.new(
110
157
  [
111
- Unit.new(unit.to_s, integer.to_s),
112
- Extender.new(extender.to_s),
158
+ Unit.new(unit.to_s, power_numerator),
159
+ Extender.new(ext.to_s),
113
160
  sequence,
114
161
  ],
115
162
  )
116
163
  end
117
164
 
118
- rule(dimensions: simple(:dimension),
119
- extender: simple(:extender),
165
+ rule(dimension: simple(:dimension),
166
+ power_numerator: simple(:power_numerator),
167
+ extender: simple(:ext),
120
168
  sequence: simple(:sequence)) do
121
169
  Formula.new(
122
170
  [
123
- Dimension.new(dimension.to_s),
124
- Extender.new(extender.to_s),
171
+ Dimension.new(dimension.to_s, power_numerator),
172
+ Extender.new(ext.to_s),
125
173
  sequence,
126
174
  ],
127
175
  )
128
176
  end
129
177
 
130
- rule(dimensions: simple(:dimension),
131
- integer: simple(:integer),
132
- extender: simple(:extender),
178
+ rule(prefix: simple(:prefix),
179
+ unit: simple(:unit),
180
+ extender: simple(:ext),
133
181
  sequence: simple(:sequence)) do
134
182
  Formula.new(
135
183
  [
136
- Dimension.new(dimension.to_s, integer.to_s),
137
- Extender.new(extender.to_s),
184
+ Unit.new(unit.to_s, prefix: Prefix.new(prefix.to_s)),
185
+ Extender.new(ext.to_s),
186
+ sequence,
187
+ ],
188
+ )
189
+ end
190
+
191
+ rule(prefix: simple(:prefix),
192
+ unit: simple(:unit),
193
+ power_numerator: simple(:power_numerator),
194
+ extender: simple(:ext),
195
+ sequence: simple(:sequence)) do
196
+ Formula.new(
197
+ [
198
+ Unit.new(unit.to_s, power_numerator, prefix: Prefix.new(prefix.to_s)),
199
+ Extender.new(ext.to_s),
138
200
  sequence,
139
201
  ],
140
202
  )
data/lib/unitsml/unit.rb CHANGED
@@ -4,7 +4,8 @@ module Unitsml
4
4
  class Unit
5
5
  attr_accessor :unit_name, :power_numerator, :prefix
6
6
 
7
- SI_UNIT_SYSTEM = %w[si_base si_derived_special si_derived_non_special].freeze
7
+ SI_UNIT_SYSTEM = %w[si_base si_derived_special
8
+ si_derived_non_special].freeze
8
9
 
9
10
  def initialize(unit_name,
10
11
  power_numerator = nil,
@@ -14,46 +15,34 @@ module Unitsml
14
15
  @power_numerator = power_numerator
15
16
  end
16
17
 
17
- def ==(object)
18
- self.class == object.class &&
19
- prefix == object&.prefix &&
20
- unit_name == object&.unit_name &&
21
- power_numerator == object&.power_numerator
18
+ def ==(other)
19
+ self.class == other.class &&
20
+ prefix == other&.prefix &&
21
+ unit_name == other&.unit_name &&
22
+ power_numerator == other&.power_numerator
22
23
  end
23
24
 
24
25
  def unit_instance
25
26
  Unitsdb.units.find_by_name(unit_name)
26
27
  end
27
28
 
28
- def unit_symbols
29
- unit_instance.symbols.find { |symbol| symbol.id == unit_name }
29
+ def unknown_name?
30
+ unit_name == Utility::UNKNOWN
30
31
  end
31
32
 
32
- def numerator_value(mathml = true)
33
- integer = power_numerator.to_s
34
- unless integer.match?(/-/)
35
- return mathml ? { mn_value: [::Mml::Mn.from_xml("<mn>#{integer}</mn>")] } : integer
36
- end
37
-
38
- return integer.sub(/(-)(.+)/, '&#x2212;\2') unless mathml
39
-
40
- integer = integer.sub(/(-)(.+)/, '<mn>\2</mn>')
41
- integer = ::Mml::Mn.from_xml(integer)
42
- mo_tag = ::Mml::Mo.new(value: "&#x2212;")
43
- { mo_value: [mo_tag], mn_value: [integer] }
33
+ def unit_symbols
34
+ unit_instance.symbols.find { |symbol| symbol.id == unit_name }
44
35
  end
45
36
 
46
37
  def to_mathml(options)
47
38
  value = unit_symbols&.mathml
48
39
  tag_name = value.match(/^<(?<tag>\w+)/)[:tag]
49
- value = ::Mml.const_get(tag_name.capitalize).from_xml(value)
40
+ value = ::Mml::V4.const_get(tag_name.capitalize).from_xml(value)
50
41
  value.value = "#{prefix.to_mathml(options)}#{value.value}" if prefix
51
42
  if power_numerator
52
- value = ::Mml::Msup.new(
53
- mrow_value: [
54
- ::Mml::Mrow.new("#{tag_name}_value": Array(value)),
55
- ::Mml::Mrow.new(numerator_value),
56
- ]
43
+ value = msup_tag(
44
+ { method_name: tag_name, value: value },
45
+ options,
57
46
  )
58
47
  tag_name = :msup
59
48
  end
@@ -62,30 +51,28 @@ module Unitsml
62
51
 
63
52
  def to_latex(options)
64
53
  value = unit_symbols&.latex
65
- value = "#{value}^#{power_numerator}" if power_numerator
54
+ value = "#{value}^#{power_numerator.to_latex(options)}" if power_numerator
66
55
  value = "#{prefix.to_latex(options)}#{value}" if prefix
67
56
  value
68
57
  end
69
58
 
70
59
  def to_asciimath(options)
71
60
  value = unit_symbols&.ascii
72
- value = "#{value}^#{power_numerator}" if power_numerator
61
+ value = "#{value}^#{power_numerator.to_asciimath(options)}" if power_numerator
73
62
  value = "#{prefix.to_asciimath(options)}#{value}" if prefix
74
63
  value
75
64
  end
76
65
 
77
66
  def to_html(options)
78
67
  value = unit_symbols&.html
79
- if power_numerator
80
- value = "#{value}<sup>#{numerator_value(false)}</sup>"
81
- end
68
+ value = "#{value}<sup>#{power_numerator.to_html(options)}</sup>" if power_numerator
82
69
  value = "#{prefix.to_html(options)}#{value}" if prefix
83
70
  value
84
71
  end
85
72
 
86
73
  def to_unicode(options)
87
74
  value = unit_symbols&.unicode
88
- value = "#{value}^#{power_numerator}" if power_numerator
75
+ value = "#{value}^#{power_numerator.to_unicode(options)}" if power_numerator
89
76
  value = "#{prefix.to_unicode(options)}#{value}" if prefix
90
77
  value
91
78
  end
@@ -118,16 +105,39 @@ module Unitsml
118
105
  Lutaml::Model::Utils.snake_case(system_type)
119
106
  end
120
107
 
108
+ def inverse_power_numerator
109
+ if power_numerator
110
+ power_numerator.update_negative_sign
111
+ else
112
+ @power_numerator = Number.new("-1")
113
+ end
114
+ end
115
+
121
116
  private
122
117
 
123
118
  def display_exp
124
119
  return unless power_numerator
125
120
 
126
- "^#{power_numerator}" if power_numerator != "1"
121
+ exp = power_numerator.raw_value
122
+ "^#{exp}" if exp != "1"
127
123
  end
128
124
 
129
125
  def system_reference
130
126
  unit_instance.unit_system_reference
131
127
  end
128
+
129
+ def msup_tag(value, options)
130
+ msup = ::Mml::V4::Msup.new
131
+ msup.ordered = true
132
+ msup.element_order = []
133
+ [value, power_numerator.to_mathml(options)].flatten.each do |record|
134
+ values = msup.public_send("#{record[:method_name]}_value") || []
135
+ values += [record[:value]]
136
+ msup.element_order << Lutaml::Xml::Element.new("Element",
137
+ record[:method_name].to_s)
138
+ msup.public_send("#{record[:method_name]}_value=", values)
139
+ end
140
+ msup
141
+ end
132
142
  end
133
143
  end
@@ -9,10 +9,10 @@ module Unitsml
9
9
  :vector
10
10
 
11
11
  def initialize(attrs)
12
- super
13
12
  @parsables = {}
14
13
  @processed_keys = []
15
14
  @parsable = false
15
+ super
16
16
  end
17
17
 
18
18
  def length=(value)
@@ -48,7 +48,9 @@ module Unitsml
48
48
  end
49
49
 
50
50
  def dim_symbols
51
- processed_keys.map { |vec| public_send(vec)&.dim_symbols&.map(&:id) }.flatten.compact
51
+ processed_keys.map do |vec|
52
+ public_send(vec)&.dim_symbols&.map(&:id)
53
+ end.flatten.compact
52
54
  end
53
55
 
54
56
  def processed_symbol
@@ -56,7 +58,7 @@ module Unitsml
56
58
  end
57
59
 
58
60
  def set_vector
59
- @vector ||= Utility::DIMS_VECTOR.map do |h|
61
+ @set_vector ||= Utility::DIMS_VECTOR.map do |h|
60
62
  public_send(Utility.underscore(h))&.power
61
63
  end.join(":")
62
64
  end
@@ -3,9 +3,13 @@
3
3
  module Unitsml
4
4
  module Unitsdb
5
5
  class Dimensions < ::Unitsdb::Dimensions
6
+ def dimensions=(value)
7
+ super(value.map { |d| Dimension.new(d.to_hash) })
8
+ end
9
+
6
10
  def find_by_vector(vector)
7
- @vectored ||= dimensions.each(&:set_vector)
8
- find(:vector, vector)
11
+ dimensions.each(&:set_vector)
12
+ dimensions.find { |dim| dim.set_vector == vector }
9
13
  end
10
14
 
11
15
  def find_by_id(d_id)
@@ -30,5 +34,3 @@ module Unitsml
30
34
  end
31
35
  end
32
36
  end
33
-
34
- Unitsml.register.register_model(Unitsml::Unitsdb::Dimensions, id: :unitsdb_dimensions)
@@ -32,5 +32,3 @@ module Unitsml
32
32
  end
33
33
  end
34
34
  end
35
-
36
- Unitsml.register.register_model(Unitsml::Unitsdb::Prefixes, id: :unitsdb_prefixes)
@@ -11,5 +11,3 @@ module Unitsml
11
11
  end
12
12
  end
13
13
  end
14
-
15
- Unitsml.register.register_model(Unitsml::Unitsdb::Quantities, id: :unitsdb_quantities)
@@ -3,6 +3,10 @@
3
3
  module Unitsml
4
4
  module Unitsdb
5
5
  class Units < ::Unitsdb::Units
6
+ def units=(value)
7
+ super(value.map { |u| Unit.new(u.to_hash) })
8
+ end
9
+
6
10
  def find_by_id(u_id)
7
11
  find(u_id, :id, :identifiers)
8
12
  end
@@ -13,7 +17,7 @@ module Unitsml
13
17
 
14
18
  def filtered
15
19
  @filtered ||= symbols_ids.reject do |unit|
16
- ((/\*|\^|\/|^1$/).match?(unit) || find_by_symbol_id(unit).prefixed)
20
+ %r{\*|\^|/|^1$}.match?(unit) || find_by_symbol_id(unit).prefixed
17
21
  end
18
22
  end
19
23
 
@@ -26,7 +30,7 @@ module Unitsml
26
30
  end
27
31
 
28
32
  def symbols_hash
29
- @symbol_ids_hash ||= units.each_with_object({}) do |unit, object|
33
+ @symbols_hash ||= units.each_with_object({}) do |unit, object|
30
34
  unit.symbols&.each { |unit_sym| object[unit_sym.id] = unit }
31
35
  end
32
36
  end
@@ -43,5 +47,3 @@ module Unitsml
43
47
  end
44
48
  end
45
49
  end
46
-
47
- Unitsml.register.register_model(Unitsml::Unitsdb::Units, id: :unitsdb_units)
@@ -2,47 +2,41 @@
2
2
 
3
3
  module Unitsml
4
4
  module Unitsdb
5
- class << self
6
- def load_file(file_name)
7
- @@hash ||= {}
8
- @@hash[file_name] ||= File.read(valid_path(file_name))
9
- end
5
+ autoload :Unit, "#{__dir__}/unitsdb/unit"
6
+ autoload :Units, "#{__dir__}/unitsdb/units"
7
+ autoload :Prefixes, "#{__dir__}/unitsdb/prefixes"
8
+ autoload :Dimension, "#{__dir__}/unitsdb/dimension"
9
+ autoload :Dimensions, "#{__dir__}/unitsdb/dimensions"
10
+ autoload :Quantities, "#{__dir__}/unitsdb/quantities"
11
+ autoload :PrefixReference, "#{__dir__}/unitsdb/prefix_reference"
12
+ autoload :DimensionQuantity, "#{__dir__}/unitsdb/dimension_quantity"
10
13
 
14
+ class << self
11
15
  def units
12
- @@units_file ||= get_class_from_register(:unitsdb_units).from_yaml(load_file(:units))
16
+ Units.new(units: ::Unitsdb.database.units)
13
17
  end
14
18
 
15
19
  def prefixes
16
- @@prefixes ||= get_class_from_register(:unitsdb_prefixes).from_yaml(load_file(:prefixes))
20
+ Prefixes.new(prefixes: ::Unitsdb.database.prefixes)
17
21
  end
18
22
 
19
23
  def dimensions
20
- @@dim_file ||= get_class_from_register(:unitsdb_dimensions).from_yaml(load_file(:dimensions))
24
+ Dimensions.new(dimensions: ::Unitsdb.database.dimensions)
21
25
  end
22
26
 
23
27
  def quantities
24
- @@quantities ||= get_class_from_register(:unitsdb_quantities).from_yaml(load_file(:quantities))
28
+ Quantities.new(quantities: ::Unitsdb.database.quantities)
25
29
  end
26
30
 
27
31
  def prefixes_array
28
- @@prefixes_array ||= prefixes.ascii_symbols.sort_by(&:length)
32
+ @prefixes_array ||= prefixes.ascii_symbols.sort_by(&:length)
29
33
  end
30
34
 
31
35
  def prefixes_by_size(size)
32
- @@sized_prefixes ||= {}
33
- return @@sized_prefixes[size] if @@sized_prefixes.key?(size)
34
-
35
- @@sized_prefixes[size] = prefixes_array.select { |p| p.size == size }
36
- end
37
-
38
- def valid_path(file_name)
39
- File.expand_path(
40
- File.join(__dir__, "..", "..","unitsdb", "#{file_name}.yaml")
41
- )
42
- end
36
+ @sized_prefixes ||= {}
37
+ return @sized_prefixes[size] if @sized_prefixes.key?(size)
43
38
 
44
- def get_class_from_register(class_name)
45
- Unitsml.register.get_class(class_name)
39
+ @sized_prefixes[size] = prefixes_array.select { |p| p.size == size }
46
40
  end
47
41
  end
48
42
  end