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/utility.rb
CHANGED
|
@@ -1,10 +1,5 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
require "unitsml/model/unit"
|
|
4
|
-
require "unitsml/model/prefix"
|
|
5
|
-
require "unitsml/model/quantity"
|
|
6
|
-
require "unitsml/model/dimension"
|
|
7
|
-
|
|
8
3
|
module Unitsml
|
|
9
4
|
module Utility
|
|
10
5
|
# Unit to dimension
|
|
@@ -23,7 +18,7 @@ module Unitsml
|
|
|
23
18
|
"deg" => { dimension: "PlaneAngle", order: 8, symbol: "phi" },
|
|
24
19
|
}.freeze
|
|
25
20
|
# Dimesion for dim_(dimesion) input
|
|
26
|
-
|
|
21
|
+
DIM2D = {
|
|
27
22
|
"dim_L" => U2D["m"],
|
|
28
23
|
"dim_M" => U2D["g"],
|
|
29
24
|
"dim_T" => U2D["s"],
|
|
@@ -44,6 +39,8 @@ module Unitsml
|
|
|
44
39
|
Time
|
|
45
40
|
].freeze
|
|
46
41
|
|
|
42
|
+
UNKNOWN = "unknown"
|
|
43
|
+
|
|
47
44
|
class << self
|
|
48
45
|
def unit_instance(unit)
|
|
49
46
|
Unitsdb.units.find_by_symbol_id(unit)
|
|
@@ -55,7 +52,9 @@ module Unitsml
|
|
|
55
52
|
|
|
56
53
|
def units2dimensions(units)
|
|
57
54
|
norm = decompose_units_list(units)
|
|
58
|
-
return if norm.any?
|
|
55
|
+
return if norm.any? do |u|
|
|
56
|
+
u.nil? || u[:unit]&.unknown_name? || u[:prefix] == UNKNOWN
|
|
57
|
+
end
|
|
59
58
|
|
|
60
59
|
norm.map do |u|
|
|
61
60
|
unit_name = u[:unit].unit_name
|
|
@@ -71,14 +70,23 @@ module Unitsml
|
|
|
71
70
|
def dim_id(dims)
|
|
72
71
|
return nil if dims.nil? || dims.empty?
|
|
73
72
|
|
|
74
|
-
dim_hash = dims.
|
|
75
|
-
dims_vector = DIMS_VECTOR.map
|
|
73
|
+
dim_hash = dims.to_h { |h| [h[:dimension], h] }
|
|
74
|
+
dims_vector = DIMS_VECTOR.map do |h|
|
|
75
|
+
dim_hash.dig(h, :exponent)
|
|
76
|
+
end.join(":")
|
|
76
77
|
id = Unitsdb.dimensions.find_by_vector(dims_vector)&.id and return id.to_s
|
|
77
78
|
|
|
78
79
|
"D_" + dims.map do |d|
|
|
79
|
-
(U2D.dig(d[:unit], :symbol) ||
|
|
80
|
-
(d[:exponent] == 1 ? "" : float_to_display(d[:exponent]))
|
|
81
|
-
end.join
|
|
80
|
+
(U2D.dig(d[:unit], :symbol) || DIM2D.dig(d[:id], :symbol)) +
|
|
81
|
+
(to_i_value(d[:exponent]) == 1 ? "" : float_to_display(d[:exponent]))
|
|
82
|
+
end.join
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
def to_i_value(object)
|
|
86
|
+
case object
|
|
87
|
+
when Integer, Float then object
|
|
88
|
+
when Number, Fenced then object.to_i
|
|
89
|
+
end
|
|
82
90
|
end
|
|
83
91
|
|
|
84
92
|
def decompose_units_list(units)
|
|
@@ -89,19 +97,19 @@ module Unitsml
|
|
|
89
97
|
if u&.unit_name == "g" || Lutaml::Model::Utils.snake_case(u.system_type) == "si_base"
|
|
90
98
|
{ unit: u, prefix: u&.prefix }
|
|
91
99
|
elsif u.si_derived_bases.nil? || u.si_derived_bases.empty?
|
|
92
|
-
{ unit: Unit.new(
|
|
100
|
+
{ unit: Unit.new(UNKNOWN) }
|
|
93
101
|
else
|
|
94
102
|
u.si_derived_bases.each_with_object([]) do |k, object|
|
|
95
|
-
prefix = if
|
|
96
|
-
combine_prefixes(prefix_object(k.prefix_reference), u.prefix)
|
|
97
|
-
else
|
|
103
|
+
prefix = if k.prefix_reference.nil?
|
|
98
104
|
u.prefix
|
|
105
|
+
else
|
|
106
|
+
combine_prefixes(prefix_object(k.prefix_reference),
|
|
107
|
+
u.prefix)
|
|
99
108
|
end
|
|
100
109
|
unit_name = Unitsdb.units.find_by_id(k.unit_reference.id).symbols.first.id
|
|
101
110
|
exponent = (k.power&.to_i || 1) * (u.power_numerator&.to_f || 1)
|
|
102
111
|
object << { prefix: prefix,
|
|
103
|
-
|
|
104
|
-
}
|
|
112
|
+
unit: Unit.new(unit_name, exponent, prefix: prefix) }
|
|
105
113
|
end
|
|
106
114
|
end
|
|
107
115
|
end
|
|
@@ -111,15 +119,25 @@ module Unitsml
|
|
|
111
119
|
if m.empty? || m[-1][:unit]&.unit_name != k[:unit]&.unit_name
|
|
112
120
|
m << k
|
|
113
121
|
else
|
|
114
|
-
m[-1][:unit]&.power_numerator = (k
|
|
122
|
+
m[-1][:unit]&.power_numerator = Number.new(numerator_value(k, m))
|
|
115
123
|
m[-1] = {
|
|
116
|
-
prefix: combine_prefixes(prefix_object(m[-1][:prefix]),
|
|
124
|
+
prefix: combine_prefixes(prefix_object(m[-1][:prefix]),
|
|
125
|
+
prefix_object(k[:prefix])),
|
|
117
126
|
unit: m[-1][:unit],
|
|
118
127
|
}
|
|
119
128
|
end
|
|
120
129
|
end
|
|
121
130
|
end
|
|
122
131
|
|
|
132
|
+
def numerator_value(unit_hash, unit_array)
|
|
133
|
+
unit_numerator_float(unit_hash) +
|
|
134
|
+
unit_numerator_float(unit_array[-1])
|
|
135
|
+
end
|
|
136
|
+
|
|
137
|
+
def unit_numerator_float(object_hash)
|
|
138
|
+
object_hash[:unit]&.power_numerator&.to_f || 1
|
|
139
|
+
end
|
|
140
|
+
|
|
123
141
|
def prefix_object(prefix)
|
|
124
142
|
return prefix unless prefix.is_a?(String)
|
|
125
143
|
return nil unless Unitsdb.prefixes_array.any?(prefix)
|
|
@@ -131,14 +149,14 @@ module Unitsml
|
|
|
131
149
|
return nil if p1.nil? && p2.nil?
|
|
132
150
|
return p1.symbolid if p2.nil?
|
|
133
151
|
return p2.symbolid if p1.nil?
|
|
134
|
-
return
|
|
152
|
+
return UNKNOWN if p1.base != p2.base
|
|
135
153
|
|
|
136
154
|
Unitsdb.prefixes_array.each do |prefix_name|
|
|
137
155
|
p = prefix_object(prefix_name)
|
|
138
156
|
return p if p.base == p1.base && p.power == p1.power + p2.power
|
|
139
157
|
end
|
|
140
158
|
|
|
141
|
-
|
|
159
|
+
UNKNOWN
|
|
142
160
|
end
|
|
143
161
|
|
|
144
162
|
def unit(units, formula, dims, norm_text, name, options)
|
|
@@ -151,6 +169,7 @@ module Unitsml
|
|
|
151
169
|
}
|
|
152
170
|
attributes[:dimension_url] = "##{dim_id(dims)}" if dims
|
|
153
171
|
Model::Unit.new(attributes).to_xml
|
|
172
|
+
.force_encoding("UTF-8")
|
|
154
173
|
.gsub("<", "<")
|
|
155
174
|
.gsub(">", ">")
|
|
156
175
|
.gsub("&", "&")
|
|
@@ -174,15 +193,14 @@ module Unitsml
|
|
|
174
193
|
|
|
175
194
|
def unitsystem(units)
|
|
176
195
|
ret = []
|
|
177
|
-
if units.any? { |u| !u.si_system_type? }
|
|
178
|
-
ret << Model::Units::System.new(name: "not_SI", type: "not_SI")
|
|
179
|
-
end
|
|
196
|
+
ret << Model::Units::System.new(name: "not_SI", type: "not_SI") if units.any? { |u| !u.si_system_type? }
|
|
180
197
|
if units.any?(&:si_system_type?)
|
|
181
198
|
if units.size == 1
|
|
182
199
|
base = units[0].downcase_system_type == "si_base"
|
|
183
200
|
base = true if units[0].unit_name == "g" && units[0]&.prefix_name == "k"
|
|
184
201
|
end
|
|
185
|
-
ret << Model::Units::System.new(name: "SI",
|
|
202
|
+
ret << Model::Units::System.new(name: "SI",
|
|
203
|
+
type: (base ? "SI_base" : "SI_derived"))
|
|
186
204
|
end
|
|
187
205
|
ret
|
|
188
206
|
end
|
|
@@ -193,7 +211,7 @@ module Unitsml
|
|
|
193
211
|
|
|
194
212
|
dim_attrs = { id: dim_id }
|
|
195
213
|
dimid2dimensions(dim_id)&.compact&.each { |u| dimension1(u, dim_attrs) }
|
|
196
|
-
Model::Dimension.new(dim_attrs).to_xml
|
|
214
|
+
Model::Dimension.new(dim_attrs).to_xml.force_encoding("UTF-8")
|
|
197
215
|
end
|
|
198
216
|
|
|
199
217
|
def dimension1(dim, dims_hash)
|
|
@@ -201,12 +219,17 @@ module Unitsml
|
|
|
201
219
|
dim_klass = Model::DimensionQuantities.const_get(dim_name)
|
|
202
220
|
dims_hash[underscore(dim_name).to_sym] = dim_klass.new(
|
|
203
221
|
symbol: dim[:symbol],
|
|
204
|
-
power_numerator: float_to_display(dim[:exponent])
|
|
222
|
+
power_numerator: float_to_display(dim[:exponent]),
|
|
205
223
|
)
|
|
206
224
|
end
|
|
207
225
|
|
|
208
226
|
def float_to_display(float)
|
|
209
|
-
float
|
|
227
|
+
case float
|
|
228
|
+
when Integer, Float
|
|
229
|
+
float.to_f.round(1).to_s.sub(/\.0$/, "")
|
|
230
|
+
when Number, Fenced
|
|
231
|
+
float.float_to_display
|
|
232
|
+
end
|
|
210
233
|
end
|
|
211
234
|
|
|
212
235
|
def dimid2dimensions(normtext)
|
|
@@ -225,10 +248,12 @@ module Unitsml
|
|
|
225
248
|
end
|
|
226
249
|
|
|
227
250
|
def prefixes(units, options)
|
|
228
|
-
uniq_prefixes = units.
|
|
251
|
+
uniq_prefixes = units.filter_map(&:prefix).uniq(&:prefix_name)
|
|
229
252
|
uniq_prefixes.map do |prefix|
|
|
230
|
-
prefix_attrs = { prefix_base: prefix&.base,
|
|
231
|
-
|
|
253
|
+
prefix_attrs = { prefix_base: prefix&.base,
|
|
254
|
+
prefix_power: prefix&.power, id: prefix&.id }
|
|
255
|
+
type_and_methods = { ASCII: :to_asciimath, unicode: :to_unicode,
|
|
256
|
+
LaTeX: :to_latex, HTML: :to_html }
|
|
232
257
|
prefix_attrs[:name] = Model::Prefixes::Name.new(content: prefix&.name)
|
|
233
258
|
prefix_attrs[:symbol] = type_and_methods.map do |type, method_name|
|
|
234
259
|
Model::Prefixes::Symbol.new(
|
|
@@ -236,7 +261,9 @@ module Unitsml
|
|
|
236
261
|
content: prefix&.public_send(method_name, options),
|
|
237
262
|
)
|
|
238
263
|
end
|
|
239
|
-
Model::Prefix.new(prefix_attrs).to_xml.
|
|
264
|
+
Model::Prefix.new(prefix_attrs).to_xml.force_encoding("UTF-8").gsub(
|
|
265
|
+
"&", "&"
|
|
266
|
+
)
|
|
240
267
|
end.join("\n")
|
|
241
268
|
end
|
|
242
269
|
|
|
@@ -247,7 +274,7 @@ module Unitsml
|
|
|
247
274
|
attributes = { unit: unit.enumerated_name }
|
|
248
275
|
attributes[:prefix] = unit.prefix_name if unit.prefix
|
|
249
276
|
unit.power_numerator && unit.power_numerator != "1" and
|
|
250
|
-
attributes[:power_numerator] = unit.power_numerator
|
|
277
|
+
attributes[:power_numerator] = unit.power_numerator.raw_value
|
|
251
278
|
Model::Units::EnumeratedRootUnit.new(attributes)
|
|
252
279
|
end
|
|
253
280
|
Model::Units::RootUnits.new(enumerated_root_unit: enum_root_units)
|
|
@@ -257,7 +284,13 @@ module Unitsml
|
|
|
257
284
|
text = text&.gsub(/[()]/, "")
|
|
258
285
|
unit = unit_instance(text)
|
|
259
286
|
|
|
260
|
-
|
|
287
|
+
format_unit_id(unit, text)&.insert(0, "U_")
|
|
288
|
+
end
|
|
289
|
+
|
|
290
|
+
def format_unit_id(unit, text)
|
|
291
|
+
return unit.nist_id&.gsub("'", "_") if unit
|
|
292
|
+
|
|
293
|
+
text&.gsub("*", ".")&.gsub("^", "")
|
|
261
294
|
end
|
|
262
295
|
|
|
263
296
|
def dimension_components(dims)
|
|
@@ -265,20 +298,30 @@ module Unitsml
|
|
|
265
298
|
|
|
266
299
|
dim_attrs = { id: dim_id(dims) }
|
|
267
300
|
dims.map { |u| dimension1(u, dim_attrs) }
|
|
268
|
-
Model::Dimension.new(dim_attrs).to_xml
|
|
301
|
+
Model::Dimension.new(dim_attrs).to_xml.force_encoding("UTF-8")
|
|
269
302
|
end
|
|
270
303
|
|
|
271
|
-
def quantity(normtext,
|
|
304
|
+
def quantity(normtext, instance)
|
|
272
305
|
unit = unit_instance(normtext)
|
|
273
|
-
return unless unit
|
|
306
|
+
return unless unit_or_quantity(unit, instance)
|
|
307
|
+
|
|
308
|
+
model_quantity_xml(
|
|
309
|
+
instance || unit.quantity_references&.first&.id,
|
|
310
|
+
"##{unit.dimension_url}",
|
|
311
|
+
)
|
|
312
|
+
end
|
|
313
|
+
|
|
314
|
+
def unit_or_quantity(unit, quantity)
|
|
315
|
+
(unit && unit.quantity_references.size == 1) ||
|
|
274
316
|
quantity_instance(quantity)
|
|
317
|
+
end
|
|
275
318
|
|
|
276
|
-
|
|
319
|
+
def model_quantity_xml(id, url)
|
|
277
320
|
Model::Quantity.new(
|
|
278
321
|
id: id,
|
|
279
322
|
name: quantity_name(id),
|
|
280
|
-
dimension_url:
|
|
281
|
-
).to_xml
|
|
323
|
+
dimension_url: url,
|
|
324
|
+
).to_xml.force_encoding("UTF-8")
|
|
282
325
|
end
|
|
283
326
|
|
|
284
327
|
def quantity_name(id)
|
|
@@ -291,7 +334,7 @@ module Unitsml
|
|
|
291
334
|
|
|
292
335
|
def string_to_html_entity(string)
|
|
293
336
|
HTMLEntities.new.encode(
|
|
294
|
-
string.frozen? ? string : string.force_encoding(
|
|
337
|
+
string.frozen? ? string : string.force_encoding("UTF-8"),
|
|
295
338
|
:hexadecimal,
|
|
296
339
|
)
|
|
297
340
|
end
|
|
@@ -303,6 +346,12 @@ module Unitsml
|
|
|
303
346
|
def underscore(str)
|
|
304
347
|
str.gsub(/([a-z])([A-Z])/, '\1_\2').downcase
|
|
305
348
|
end
|
|
349
|
+
|
|
350
|
+
def set_to_fence(set)
|
|
351
|
+
return set if set.is_a?(Fenced)
|
|
352
|
+
|
|
353
|
+
Fenced.new("(", set, ")")
|
|
354
|
+
end
|
|
306
355
|
end
|
|
307
356
|
end
|
|
308
357
|
end
|
data/lib/unitsml/version.rb
CHANGED
data/lib/unitsml.rb
CHANGED
|
@@ -1,10 +1,31 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
3
|
require "lutaml/model"
|
|
4
|
+
require "unitsdb"
|
|
5
|
+
|
|
4
6
|
module Unitsml
|
|
5
|
-
|
|
7
|
+
module_function
|
|
8
|
+
|
|
9
|
+
autoload :Dimension, "unitsml/dimension"
|
|
10
|
+
autoload :Errors, "unitsml/errors"
|
|
11
|
+
autoload :Extender, "unitsml/extender"
|
|
12
|
+
autoload :Fenced, "unitsml/fenced"
|
|
13
|
+
autoload :FencedNumeric, "unitsml/fenced_numeric"
|
|
14
|
+
autoload :Formula, "unitsml/formula"
|
|
15
|
+
autoload :IntermediateExpRules, "unitsml/intermediate_exp_rules"
|
|
16
|
+
autoload :Model, "unitsml/model"
|
|
17
|
+
autoload :Namespace, "unitsml/namespace"
|
|
18
|
+
autoload :Number, "unitsml/number"
|
|
19
|
+
autoload :Parse, "unitsml/parse"
|
|
20
|
+
autoload :Parser, "unitsml/parser"
|
|
21
|
+
autoload :Prefix, "unitsml/prefix"
|
|
22
|
+
autoload :Sqrt, "unitsml/sqrt"
|
|
23
|
+
autoload :Transform, "unitsml/transform"
|
|
24
|
+
autoload :Unit, "unitsml/unit"
|
|
25
|
+
autoload :Unitsdb, "unitsml/unitsdb"
|
|
26
|
+
autoload :Utility, "unitsml/utility"
|
|
27
|
+
autoload :VERSION, "unitsml/version"
|
|
6
28
|
|
|
7
|
-
UNITSML_NS = "https://schema.unitsml.org/unitsml/1.0"
|
|
8
29
|
REGISTER_ID = :unitsml_ruby
|
|
9
30
|
|
|
10
31
|
def parse(string)
|
|
@@ -14,48 +35,45 @@ module Unitsml
|
|
|
14
35
|
def register
|
|
15
36
|
@register ||= Lutaml::Model::GlobalRegister.lookup(REGISTER_ID)
|
|
16
37
|
end
|
|
38
|
+
|
|
39
|
+
def register_model(klass, id:)
|
|
40
|
+
register.register_model(klass, id: id)
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
def get_class_from_register(class_name)
|
|
44
|
+
register.get_class(class_name)
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
def register_type_substitution(from:, to:)
|
|
48
|
+
register.register_global_type_substitution(
|
|
49
|
+
from_type: from,
|
|
50
|
+
to_type: to,
|
|
51
|
+
)
|
|
52
|
+
end
|
|
17
53
|
end
|
|
18
54
|
|
|
19
55
|
Lutaml::Model::GlobalRegister.register(
|
|
20
|
-
Lutaml::Model::Register.new(Unitsml::REGISTER_ID)
|
|
56
|
+
Lutaml::Model::Register.new(Unitsml::REGISTER_ID),
|
|
21
57
|
)
|
|
22
58
|
|
|
23
|
-
require "unitsdb"
|
|
24
|
-
require "unitsml/error"
|
|
25
|
-
require "unitsml/sqrt"
|
|
26
|
-
require "unitsml/unit"
|
|
27
|
-
require "unitsml/parse"
|
|
28
|
-
require "unitsml/parser"
|
|
29
|
-
require "unitsml/prefix"
|
|
30
|
-
require "unitsml/fenced"
|
|
31
|
-
require "unitsml/formula"
|
|
32
|
-
require "unitsml/version"
|
|
33
|
-
require "unitsml/unitsdb"
|
|
34
|
-
require "unitsml/extender"
|
|
35
|
-
require "unitsml/dimension"
|
|
36
|
-
require "unitsml/transform"
|
|
37
|
-
require "unitsml/unitsdb/unit"
|
|
38
|
-
require "unitsml/unitsdb/units"
|
|
39
|
-
require "unitsml/unitsdb/prefixes"
|
|
40
|
-
require "unitsml/unitsdb/dimension"
|
|
41
|
-
require "unitsml/unitsdb/dimensions"
|
|
42
|
-
require "unitsml/unitsdb/quantities"
|
|
43
|
-
require "unitsml/unitsdb/prefix_reference"
|
|
44
|
-
require "unitsml/unitsdb/dimension_quantity"
|
|
45
|
-
|
|
46
59
|
{
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
60
|
+
Unitsdb::Unit => Unitsml::Unitsdb::Unit,
|
|
61
|
+
Unitsdb::Units => Unitsml::Unitsdb::Units,
|
|
62
|
+
Unitsdb::Prefixes => Unitsml::Unitsdb::Prefixes,
|
|
63
|
+
Unitsdb::Dimension => Unitsml::Unitsdb::Dimension,
|
|
64
|
+
Unitsdb::PrefixReference => Unitsml::Unitsdb::PrefixReference,
|
|
65
|
+
Unitsdb::DimensionDetails => Unitsml::Unitsdb::DimensionQuantity,
|
|
53
66
|
}.each do |key, value|
|
|
54
|
-
Unitsml.
|
|
55
|
-
.register_global_type_substitution(
|
|
56
|
-
from_type: key,
|
|
57
|
-
to_type: value,
|
|
58
|
-
)
|
|
67
|
+
Unitsml.register_type_substitution(from: key, to: value)
|
|
59
68
|
end
|
|
60
69
|
|
|
61
|
-
|
|
70
|
+
[
|
|
71
|
+
[Unitsml::Unitsdb::Dimensions, :unitsdb_dimensions],
|
|
72
|
+
[Unitsml::Unitsdb::Prefixes, :unitsdb_prefixes],
|
|
73
|
+
[Unitsml::Unitsdb::Quantities, :unitsdb_quantities],
|
|
74
|
+
[Unitsml::Unitsdb::Units, :unitsdb_units],
|
|
75
|
+
].each { |klass, id| Unitsml.register_model(klass, id: id) }
|
|
76
|
+
|
|
77
|
+
Lutaml::Model::Config.configure do |config|
|
|
78
|
+
config.xml_adapter_type = RUBY_ENGINE == "opal" ? :oga : :ox
|
|
79
|
+
end
|
data/unitsml.gemspec
CHANGED
|
@@ -1,35 +1,40 @@
|
|
|
1
|
-
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require_relative "lib/unitsml/version"
|
|
2
4
|
|
|
3
5
|
Gem::Specification.new do |spec|
|
|
4
|
-
spec.name =
|
|
6
|
+
spec.name = "unitsml"
|
|
5
7
|
spec.version = Unitsml::VERSION
|
|
6
|
-
spec.authors = [
|
|
7
|
-
spec.email = [
|
|
8
|
+
spec.authors = ["Ribose Inc."]
|
|
9
|
+
spec.email = ["open.source@ribose.com"]
|
|
8
10
|
|
|
9
|
-
spec.summary =
|
|
10
|
-
spec.description =
|
|
11
|
+
spec.summary = "UnitsML in Ruby"
|
|
12
|
+
spec.description = "Library to work with UnitsML in Ruby"
|
|
11
13
|
|
|
12
|
-
spec.homepage =
|
|
13
|
-
spec.license =
|
|
14
|
+
spec.homepage = "https://github.com/unitsml/unitsml-ruby"
|
|
15
|
+
spec.license = "BSD-2-Clause"
|
|
14
16
|
|
|
15
|
-
spec.required_ruby_version = Gem::Requirement.new(
|
|
17
|
+
spec.required_ruby_version = Gem::Requirement.new(">= 2.3.0")
|
|
16
18
|
|
|
17
|
-
spec.metadata[
|
|
19
|
+
spec.metadata["homepage_uri"] = spec.homepage
|
|
20
|
+
spec.metadata["rubygems_mfa_required"] = "true"
|
|
18
21
|
|
|
19
22
|
# Specify which files should be added to the gem when it is released.
|
|
20
23
|
# The `git ls-files -z` loads the files in the RubyGem that have been added into git.
|
|
21
24
|
spec.files = Dir.chdir(File.expand_path(__dir__)) do
|
|
22
|
-
`git ls-files -z`.split("\x0").reject
|
|
25
|
+
`git ls-files -z`.split("\x0").reject do |f|
|
|
26
|
+
f.match(%r{^(test|spec|features)/})
|
|
27
|
+
end
|
|
23
28
|
end
|
|
24
|
-
spec.files += Dir.glob(
|
|
29
|
+
spec.files += Dir.glob("unitsdb/**/*")
|
|
25
30
|
|
|
26
|
-
spec.bindir =
|
|
31
|
+
spec.bindir = "exe"
|
|
27
32
|
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
|
28
|
-
spec.require_paths = [
|
|
33
|
+
spec.require_paths = ["lib", "unitsdb/**/*.yaml"]
|
|
29
34
|
|
|
30
|
-
spec.add_dependency
|
|
31
|
-
spec.add_dependency
|
|
32
|
-
spec.add_dependency
|
|
33
|
-
spec.add_dependency
|
|
34
|
-
spec.add_dependency
|
|
35
|
+
spec.add_dependency "htmlentities"
|
|
36
|
+
spec.add_dependency "lutaml-model", "~> 0.8.0"
|
|
37
|
+
spec.add_dependency "mml"
|
|
38
|
+
spec.add_dependency "parslet"
|
|
39
|
+
spec.add_dependency "unitsdb", "~> 2.2.1"
|
|
35
40
|
end
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: unitsml
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 0.6.1
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Ribose Inc.
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: exe
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date:
|
|
11
|
+
date: 2026-04-04 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: htmlentities
|
|
@@ -25,21 +25,21 @@ dependencies:
|
|
|
25
25
|
- !ruby/object:Gem::Version
|
|
26
26
|
version: '0'
|
|
27
27
|
- !ruby/object:Gem::Dependency
|
|
28
|
-
name:
|
|
28
|
+
name: lutaml-model
|
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
|
30
30
|
requirements:
|
|
31
|
-
- - "
|
|
31
|
+
- - "~>"
|
|
32
32
|
- !ruby/object:Gem::Version
|
|
33
|
-
version:
|
|
33
|
+
version: 0.8.0
|
|
34
34
|
type: :runtime
|
|
35
35
|
prerelease: false
|
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
|
37
37
|
requirements:
|
|
38
|
-
- - "
|
|
38
|
+
- - "~>"
|
|
39
39
|
- !ruby/object:Gem::Version
|
|
40
|
-
version:
|
|
40
|
+
version: 0.8.0
|
|
41
41
|
- !ruby/object:Gem::Dependency
|
|
42
|
-
name:
|
|
42
|
+
name: mml
|
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
|
44
44
|
requirements:
|
|
45
45
|
- - ">="
|
|
@@ -53,33 +53,33 @@ dependencies:
|
|
|
53
53
|
- !ruby/object:Gem::Version
|
|
54
54
|
version: '0'
|
|
55
55
|
- !ruby/object:Gem::Dependency
|
|
56
|
-
name:
|
|
56
|
+
name: parslet
|
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
|
58
58
|
requirements:
|
|
59
|
-
- - "
|
|
59
|
+
- - ">="
|
|
60
60
|
- !ruby/object:Gem::Version
|
|
61
|
-
version: '
|
|
61
|
+
version: '0'
|
|
62
62
|
type: :runtime
|
|
63
63
|
prerelease: false
|
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
|
65
65
|
requirements:
|
|
66
|
-
- - "
|
|
66
|
+
- - ">="
|
|
67
67
|
- !ruby/object:Gem::Version
|
|
68
|
-
version: '
|
|
68
|
+
version: '0'
|
|
69
69
|
- !ruby/object:Gem::Dependency
|
|
70
|
-
name:
|
|
70
|
+
name: unitsdb
|
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
|
72
72
|
requirements:
|
|
73
73
|
- - "~>"
|
|
74
74
|
- !ruby/object:Gem::Version
|
|
75
|
-
version:
|
|
75
|
+
version: 2.2.1
|
|
76
76
|
type: :runtime
|
|
77
77
|
prerelease: false
|
|
78
78
|
version_requirements: !ruby/object:Gem::Requirement
|
|
79
79
|
requirements:
|
|
80
80
|
- - "~>"
|
|
81
81
|
- !ruby/object:Gem::Version
|
|
82
|
-
version:
|
|
82
|
+
version: 2.2.1
|
|
83
83
|
description: Library to work with UnitsML in Ruby
|
|
84
84
|
email:
|
|
85
85
|
- open.source@ribose.com
|
|
@@ -94,6 +94,8 @@ files:
|
|
|
94
94
|
- ".gitignore"
|
|
95
95
|
- ".gitmodules"
|
|
96
96
|
- ".rspec"
|
|
97
|
+
- ".rubocop.yml"
|
|
98
|
+
- ".rubocop_todo.yml"
|
|
97
99
|
- Gemfile
|
|
98
100
|
- LICENSE.md
|
|
99
101
|
- Rakefile
|
|
@@ -104,13 +106,17 @@ files:
|
|
|
104
106
|
- docs/navigation.adoc
|
|
105
107
|
- lib/unitsml.rb
|
|
106
108
|
- lib/unitsml/dimension.rb
|
|
107
|
-
- lib/unitsml/
|
|
109
|
+
- lib/unitsml/errors.rb
|
|
110
|
+
- lib/unitsml/errors/base_error.rb
|
|
108
111
|
- lib/unitsml/errors/plurimath_load_error.rb
|
|
109
112
|
- lib/unitsml/extender.rb
|
|
110
113
|
- lib/unitsml/fenced.rb
|
|
114
|
+
- lib/unitsml/fenced_numeric.rb
|
|
111
115
|
- lib/unitsml/formula.rb
|
|
112
116
|
- lib/unitsml/intermediate_exp_rules.rb
|
|
117
|
+
- lib/unitsml/model.rb
|
|
113
118
|
- lib/unitsml/model/dimension.rb
|
|
119
|
+
- lib/unitsml/model/dimension_quantities.rb
|
|
114
120
|
- lib/unitsml/model/dimension_quantities/amount_of_substance.rb
|
|
115
121
|
- lib/unitsml/model/dimension_quantities/electric_current.rb
|
|
116
122
|
- lib/unitsml/model/dimension_quantities/length.rb
|
|
@@ -121,16 +127,21 @@ files:
|
|
|
121
127
|
- lib/unitsml/model/dimension_quantities/thermodynamic_temperature.rb
|
|
122
128
|
- lib/unitsml/model/dimension_quantities/time.rb
|
|
123
129
|
- lib/unitsml/model/prefix.rb
|
|
130
|
+
- lib/unitsml/model/prefixes.rb
|
|
124
131
|
- lib/unitsml/model/prefixes/name.rb
|
|
125
132
|
- lib/unitsml/model/prefixes/symbol.rb
|
|
133
|
+
- lib/unitsml/model/quantities.rb
|
|
126
134
|
- lib/unitsml/model/quantities/name.rb
|
|
127
135
|
- lib/unitsml/model/quantity.rb
|
|
128
136
|
- lib/unitsml/model/unit.rb
|
|
137
|
+
- lib/unitsml/model/units.rb
|
|
129
138
|
- lib/unitsml/model/units/enumerated_root_unit.rb
|
|
130
139
|
- lib/unitsml/model/units/name.rb
|
|
131
140
|
- lib/unitsml/model/units/root_units.rb
|
|
132
141
|
- lib/unitsml/model/units/symbol.rb
|
|
133
142
|
- lib/unitsml/model/units/system.rb
|
|
143
|
+
- lib/unitsml/namespace.rb
|
|
144
|
+
- lib/unitsml/number.rb
|
|
134
145
|
- lib/unitsml/parse.rb
|
|
135
146
|
- lib/unitsml/parser.rb
|
|
136
147
|
- lib/unitsml/prefix.rb
|
|
@@ -148,30 +159,13 @@ files:
|
|
|
148
159
|
- lib/unitsml/unitsdb/units.rb
|
|
149
160
|
- lib/unitsml/utility.rb
|
|
150
161
|
- lib/unitsml/version.rb
|
|
151
|
-
- unitsdb/LICENSE.md
|
|
152
|
-
- unitsdb/README.adoc
|
|
153
|
-
- unitsdb/RELEASE-NOTES.adoc
|
|
154
|
-
- unitsdb/dimensions.yaml
|
|
155
|
-
- unitsdb/prefixes.yaml
|
|
156
|
-
- unitsdb/quantities.yaml
|
|
157
|
-
- unitsdb/scales.yaml
|
|
158
|
-
- unitsdb/schemas/README.md
|
|
159
|
-
- unitsdb/schemas/dimensions-schema.yaml
|
|
160
|
-
- unitsdb/schemas/prefixes-schema.yaml
|
|
161
|
-
- unitsdb/schemas/quantities-schema.yaml
|
|
162
|
-
- unitsdb/schemas/scales-schema.yaml
|
|
163
|
-
- unitsdb/schemas/unit_systems-schema.yaml
|
|
164
|
-
- unitsdb/schemas/units-schema.yaml
|
|
165
|
-
- unitsdb/spec/units_spec.rb
|
|
166
|
-
- unitsdb/unit_systems.yaml
|
|
167
|
-
- unitsdb/units.yaml
|
|
168
|
-
- unitsdb/validate_schemas.rb
|
|
169
162
|
- unitsml.gemspec
|
|
170
163
|
homepage: https://github.com/unitsml/unitsml-ruby
|
|
171
164
|
licenses:
|
|
172
165
|
- BSD-2-Clause
|
|
173
166
|
metadata:
|
|
174
167
|
homepage_uri: https://github.com/unitsml/unitsml-ruby
|
|
168
|
+
rubygems_mfa_required: 'true'
|
|
175
169
|
post_install_message:
|
|
176
170
|
rdoc_options: []
|
|
177
171
|
require_paths:
|