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.
- checksums.yaml +4 -4
- data/.github/workflows/rake.yml +8 -0
- data/.github/workflows/release.yml +7 -1
- data/.gitmodules +0 -3
- data/.rubocop.yml +18 -0
- data/.rubocop_todo.yml +495 -0
- data/Gemfile +8 -3
- data/Rakefile +3 -1
- data/bin/console +1 -0
- data/docs/README.adoc +2 -2
- data/lib/unitsml/dimension.rb +48 -34
- data/lib/unitsml/errors/base_error.rb +8 -0
- data/lib/unitsml/errors/plurimath_load_error.rb +1 -1
- data/lib/unitsml/errors.rb +8 -0
- data/lib/unitsml/extender.rb +16 -11
- data/lib/unitsml/fenced.rb +28 -8
- data/lib/unitsml/fenced_numeric.rb +13 -0
- data/lib/unitsml/formula.rb +35 -26
- data/lib/unitsml/intermediate_exp_rules.rb +68 -17
- data/lib/unitsml/model/dimension.rb +4 -14
- data/lib/unitsml/model/dimension_quantities/quantity.rb +2 -0
- data/lib/unitsml/model/dimension_quantities.rb +21 -0
- data/lib/unitsml/model/prefix.rb +4 -8
- data/lib/unitsml/model/prefixes/name.rb +5 -4
- data/lib/unitsml/model/prefixes/symbol.rb +3 -2
- data/lib/unitsml/model/prefixes.rb +10 -0
- data/lib/unitsml/model/quantities/name.rb +4 -3
- data/lib/unitsml/model/quantities.rb +9 -0
- data/lib/unitsml/model/quantity.rb +4 -6
- data/lib/unitsml/model/unit.rb +4 -9
- data/lib/unitsml/model/units/enumerated_root_unit.rb +1 -0
- data/lib/unitsml/model/units/name.rb +4 -3
- data/lib/unitsml/model/units/root_units.rb +3 -2
- data/lib/unitsml/model/units/symbol.rb +5 -2
- data/lib/unitsml/model/units/system.rb +4 -3
- data/lib/unitsml/model/units.rb +13 -0
- data/lib/unitsml/model.rb +15 -0
- data/lib/unitsml/namespace.rb +8 -0
- data/lib/unitsml/number.rb +79 -0
- data/lib/unitsml/parse.rb +31 -19
- data/lib/unitsml/parser.rb +5 -6
- data/lib/unitsml/prefix.rb +11 -9
- data/lib/unitsml/sqrt.rb +3 -3
- data/lib/unitsml/transform.rb +117 -55
- data/lib/unitsml/unit.rb +43 -33
- data/lib/unitsml/unitsdb/dimension.rb +5 -3
- data/lib/unitsml/unitsdb/dimensions.rb +6 -4
- data/lib/unitsml/unitsdb/prefixes.rb +0 -2
- data/lib/unitsml/unitsdb/quantities.rb +0 -2
- data/lib/unitsml/unitsdb/units.rb +6 -4
- data/lib/unitsml/unitsdb.rb +17 -23
- data/lib/unitsml/utility.rb +91 -42
- data/lib/unitsml/version.rb +3 -1
- data/lib/unitsml.rb +56 -38
- data/unitsml.gemspec +24 -19
- metadata +29 -35
- data/lib/unitsml/error.rb +0 -8
- data/unitsdb/LICENSE.md +0 -53
- data/unitsdb/README.adoc +0 -1071
- data/unitsdb/RELEASE-NOTES.adoc +0 -269
- data/unitsdb/dimensions.yaml +0 -1512
- data/unitsdb/prefixes.yaml +0 -774
- data/unitsdb/quantities.yaml +0 -3113
- data/unitsdb/scales.yaml +0 -97
- data/unitsdb/schemas/README.md +0 -159
- data/unitsdb/schemas/dimensions-schema.yaml +0 -157
- data/unitsdb/schemas/prefixes-schema.yaml +0 -159
- data/unitsdb/schemas/quantities-schema.yaml +0 -120
- data/unitsdb/schemas/scales-schema.yaml +0 -109
- data/unitsdb/schemas/unit_systems-schema.yaml +0 -120
- data/unitsdb/schemas/units-schema.yaml +0 -219
- data/unitsdb/spec/units_spec.rb +0 -20
- data/unitsdb/unit_systems.yaml +0 -74
- data/unitsdb/units.yaml +0 -13101
- data/unitsdb/validate_schemas.rb +0 -208
data/lib/unitsml/transform.rb
CHANGED
|
@@ -3,138 +3,200 @@
|
|
|
3
3
|
require "parslet"
|
|
4
4
|
module Unitsml
|
|
5
5
|
class Transform < Parslet::Transform
|
|
6
|
-
rule(sqrt: simple(:sqrt))
|
|
7
|
-
rule(
|
|
8
|
-
rule(
|
|
9
|
-
rule(
|
|
10
|
-
rule(
|
|
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(
|
|
13
|
-
|
|
14
|
-
|
|
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(
|
|
18
|
-
|
|
19
|
-
|
|
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(
|
|
23
|
-
|
|
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(
|
|
28
|
-
|
|
29
|
-
|
|
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(
|
|
35
|
-
|
|
36
|
-
|
|
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(
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
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
|
-
|
|
47
|
-
|
|
77
|
+
first_set,
|
|
78
|
+
Extender.new(extender.to_s),
|
|
79
|
+
second_set,
|
|
48
80
|
],
|
|
49
81
|
)
|
|
50
82
|
end
|
|
51
83
|
|
|
52
|
-
rule(
|
|
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
|
-
|
|
89
|
+
implicit_extended,
|
|
58
90
|
Extender.new(extender.to_s),
|
|
59
91
|
sequence,
|
|
60
92
|
],
|
|
61
93
|
)
|
|
62
94
|
end
|
|
63
95
|
|
|
64
|
-
rule(
|
|
65
|
-
units: simple(:unit),
|
|
66
|
-
integer: simple(:integer),
|
|
96
|
+
rule(int_exp: simple(:int_exp),
|
|
67
97
|
extender: simple(:extender),
|
|
68
|
-
sequence: simple(:sequence)
|
|
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
|
-
|
|
101
|
+
int_exp,
|
|
74
102
|
Extender.new(extender.to_s),
|
|
75
103
|
sequence,
|
|
76
104
|
],
|
|
77
105
|
)
|
|
78
106
|
end
|
|
79
107
|
|
|
80
|
-
rule(
|
|
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
|
|
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(
|
|
120
|
+
rule(dimension: simple(:dimension),
|
|
94
121
|
extender: simple(:extender),
|
|
95
122
|
sequence: simple(:sequence)) do
|
|
96
123
|
Formula.new(
|
|
97
124
|
[
|
|
98
|
-
|
|
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(
|
|
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
|
-
|
|
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,
|
|
112
|
-
Extender.new(
|
|
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(
|
|
119
|
-
|
|
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(
|
|
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(
|
|
131
|
-
|
|
132
|
-
extender: simple(:
|
|
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
|
-
|
|
137
|
-
Extender.new(
|
|
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
|
|
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 ==(
|
|
18
|
-
self.class ==
|
|
19
|
-
prefix ==
|
|
20
|
-
unit_name ==
|
|
21
|
-
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
|
|
29
|
-
|
|
29
|
+
def unknown_name?
|
|
30
|
+
unit_name == Utility::UNKNOWN
|
|
30
31
|
end
|
|
31
32
|
|
|
32
|
-
def
|
|
33
|
-
|
|
34
|
-
unless integer.match?(/-/)
|
|
35
|
-
return mathml ? { mn_value: [::Mml::Mn.from_xml("<mn>#{integer}</mn>")] } : integer
|
|
36
|
-
end
|
|
37
|
-
|
|
38
|
-
return integer.sub(/(-)(.+)/, '−\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: "−")
|
|
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 =
|
|
53
|
-
|
|
54
|
-
|
|
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
|
-
|
|
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
|
|
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
|
-
@
|
|
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
|
-
|
|
8
|
-
find
|
|
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)
|
|
@@ -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
|
-
|
|
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
|
-
@
|
|
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)
|
data/lib/unitsml/unitsdb.rb
CHANGED
|
@@ -2,47 +2,41 @@
|
|
|
2
2
|
|
|
3
3
|
module Unitsml
|
|
4
4
|
module Unitsdb
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
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
|
-
|
|
16
|
+
Units.new(units: ::Unitsdb.database.units)
|
|
13
17
|
end
|
|
14
18
|
|
|
15
19
|
def prefixes
|
|
16
|
-
|
|
20
|
+
Prefixes.new(prefixes: ::Unitsdb.database.prefixes)
|
|
17
21
|
end
|
|
18
22
|
|
|
19
23
|
def dimensions
|
|
20
|
-
|
|
24
|
+
Dimensions.new(dimensions: ::Unitsdb.database.dimensions)
|
|
21
25
|
end
|
|
22
26
|
|
|
23
27
|
def quantities
|
|
24
|
-
|
|
28
|
+
Quantities.new(quantities: ::Unitsdb.database.quantities)
|
|
25
29
|
end
|
|
26
30
|
|
|
27
31
|
def prefixes_array
|
|
28
|
-
|
|
32
|
+
@prefixes_array ||= prefixes.ascii_symbols.sort_by(&:length)
|
|
29
33
|
end
|
|
30
34
|
|
|
31
35
|
def prefixes_by_size(size)
|
|
32
|
-
|
|
33
|
-
return
|
|
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
|
-
|
|
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
|