unitsml 0.3.0 → 0.4.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/dependent-repos.json +5 -0
- data/.github/workflows/depenedent-gems.yml +16 -0
- data/Gemfile +1 -0
- data/lib/unitsml/dimension.rb +47 -38
- data/lib/unitsml/extender.rb +24 -10
- data/lib/unitsml/formula.rb +79 -55
- data/lib/unitsml/model/dimension.rb +42 -0
- data/lib/unitsml/model/dimension_quantities/amount_of_substance.rb +10 -0
- data/lib/unitsml/model/dimension_quantities/electric_current.rb +10 -0
- data/lib/unitsml/model/dimension_quantities/length.rb +10 -0
- data/lib/unitsml/model/dimension_quantities/luminous_intensity.rb +10 -0
- data/lib/unitsml/model/dimension_quantities/mass.rb +10 -0
- data/lib/unitsml/model/dimension_quantities/plane_angle.rb +10 -0
- data/lib/unitsml/model/dimension_quantities/quantity.rb +17 -0
- data/lib/unitsml/model/dimension_quantities/thermodynamic_temperature.rb +10 -0
- data/lib/unitsml/model/dimension_quantities/time.rb +10 -0
- data/lib/unitsml/model/prefix.rb +28 -0
- data/lib/unitsml/model/prefixes/name.rb +19 -0
- data/lib/unitsml/model/prefixes/symbol.rb +19 -0
- data/lib/unitsml/model/quantities/name.rb +19 -0
- data/lib/unitsml/model/quantity.rb +24 -0
- data/lib/unitsml/model/unit.rb +31 -0
- data/lib/unitsml/model/units/enumerated_root_unit.rb +19 -0
- data/lib/unitsml/model/units/name.rb +19 -0
- data/lib/unitsml/model/units/root_units.rb +17 -0
- data/lib/unitsml/model/units/symbol.rb +26 -0
- data/lib/unitsml/model/units/system.rb +21 -0
- data/lib/unitsml/parse.rb +5 -7
- data/lib/unitsml/parser.rb +3 -3
- data/lib/unitsml/prefix.rb +21 -21
- data/lib/unitsml/sqrt.rb +10 -10
- data/lib/unitsml/unit.rb +35 -35
- data/lib/unitsml/unitsdb/dimension.rb +88 -0
- data/lib/unitsml/unitsdb/dimension_quantity.rb +15 -0
- data/lib/unitsml/unitsdb/dimensions.rb +38 -0
- data/lib/unitsml/unitsdb/prefixes.rb +22 -0
- data/lib/unitsml/unitsdb/quantities.rb +13 -0
- data/lib/unitsml/unitsdb/units.rb +44 -0
- data/lib/unitsml/unitsdb.rb +13 -71
- data/lib/unitsml/utility.rb +101 -111
- data/lib/unitsml/version.rb +1 -1
- data/lib/unitsml.rb +26 -6
- data/unitsml.gemspec +2 -1
- metadata +46 -3
@@ -0,0 +1,44 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Unitsml
|
4
|
+
module Unitsdb
|
5
|
+
class Units
|
6
|
+
attr_accessor :units
|
7
|
+
|
8
|
+
def find_by_id(u_id)
|
9
|
+
units.find { |unit| unit.id == u_id }
|
10
|
+
end
|
11
|
+
|
12
|
+
def find_by_name(u_name)
|
13
|
+
units.find do |unit|
|
14
|
+
unit.unit_symbols.find { |u_sym| u_sym.id == u_name }
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
def filtered
|
19
|
+
@filtered ||= units_symbol_ids.reject do |unit|
|
20
|
+
((/\*|\^|\/|^1$/).match?(unit) || find_by_symbol_id(unit).prefixed)
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
def find_by_symbol_id(sym_id)
|
25
|
+
units_symbol_hash[sym_id]
|
26
|
+
end
|
27
|
+
|
28
|
+
def units_symbol_ids
|
29
|
+
units_symbol_hash.keys
|
30
|
+
end
|
31
|
+
|
32
|
+
def units_symbol_hash
|
33
|
+
@symbol_ids_hash ||= {}
|
34
|
+
|
35
|
+
if @symbol_ids_hash.empty?
|
36
|
+
units.each_with_object(@symbol_ids_hash) do |unit, object|
|
37
|
+
unit.unit_symbols.each { |unit_sym| object[unit_sym.id] = unit }
|
38
|
+
end
|
39
|
+
end
|
40
|
+
@symbol_ids_hash
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
data/lib/unitsml/unitsdb.rb
CHANGED
@@ -1,96 +1,38 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require "yaml"
|
4
3
|
module Unitsml
|
5
4
|
module Unitsdb
|
6
5
|
class << self
|
7
|
-
def
|
6
|
+
def load_file(file_name)
|
8
7
|
@@hash ||= {}
|
9
|
-
@@hash[file_name] ||=
|
10
|
-
end
|
11
|
-
|
12
|
-
def load_dimensions
|
13
|
-
@@dim_file = load_yaml(:dimensions)
|
14
|
-
end
|
15
|
-
|
16
|
-
def load_units
|
17
|
-
@@units_file = load_yaml(:units)
|
8
|
+
@@hash[file_name] ||= File.read(valid_path(file_name))
|
18
9
|
end
|
19
10
|
|
20
11
|
def units
|
21
|
-
@@
|
22
|
-
return @@units unless @@units.empty?
|
23
|
-
|
24
|
-
load_units.each do |key, value|
|
25
|
-
value["unit_symbols"]&.each do |symbol|
|
26
|
-
@@units[symbol["id"]] = { id: key, fields: value } unless symbol["id"]&.empty?
|
27
|
-
end
|
28
|
-
end
|
29
|
-
@@units
|
12
|
+
@@units_file ||= ::Unitsdb::Units.from_yaml(load_file((:units)))
|
30
13
|
end
|
31
14
|
|
32
15
|
def prefixes
|
33
|
-
@@
|
16
|
+
@@prefixes ||= ::Unitsdb::Prefixes.from_yaml(load_file(:prefixes))
|
34
17
|
end
|
35
18
|
|
36
|
-
def
|
37
|
-
@@
|
38
|
-
return @@parsable_dimensions unless @@parsable_dimensions.empty?
|
39
|
-
|
40
|
-
dimensions_hash.each do |key, value|
|
41
|
-
value.each do |_, v|
|
42
|
-
@@parsable_dimensions[find_id(v)] = { id: key, fields: value }
|
43
|
-
end
|
44
|
-
end
|
45
|
-
@@parsable_dimensions
|
19
|
+
def dimensions
|
20
|
+
@@dim_file ||= ::Unitsdb::Dimensions.from_yaml(load_file(:dimensions))
|
46
21
|
end
|
47
22
|
|
48
23
|
def quantities
|
49
|
-
@@quantities ||=
|
50
|
-
end
|
51
|
-
|
52
|
-
def filtered_units
|
53
|
-
@@filtered_units_array ||= units.keys.reject do |unit|
|
54
|
-
((/\*|\^|\/|^1$/).match?(unit) || units.dig(unit, :fields, "prefixed"))
|
55
|
-
end
|
56
|
-
end
|
57
|
-
|
58
|
-
def prefixes_hash
|
59
|
-
@@prefixes_hashes ||= prefixs_ids(load_yaml(:prefixes))
|
60
|
-
end
|
61
|
-
|
62
|
-
def dimensions_hash
|
63
|
-
@@dimensions_hashs ||= insert_vectors(load_dimensions)
|
24
|
+
@@quantities ||= ::Unitsdb::Quantities.from_yaml(load_file((:quantities)))
|
64
25
|
end
|
65
26
|
|
66
|
-
def
|
67
|
-
|
68
|
-
symbol = value&.dig("symbol", "ascii")
|
69
|
-
hash[symbol] = { id: key, fields: value } unless symbol&.empty?
|
70
|
-
end
|
71
|
-
hash
|
27
|
+
def prefixes_array
|
28
|
+
@@prefixes_array ||= prefixes.ascii_symbols.sort_by(&:length)
|
72
29
|
end
|
73
30
|
|
74
|
-
def
|
75
|
-
|
76
|
-
return
|
77
|
-
|
78
|
-
value&.dig("dim_symbols")&.map { |symbol| symbol&.dig("id") }&.first
|
79
|
-
end
|
80
|
-
|
81
|
-
def vector(dim_hash)
|
82
|
-
Utility::DIMS_VECTOR.map { |h| dim_hash.dig(underscore(h), "powerNumerator") }.join(":")
|
83
|
-
end
|
84
|
-
|
85
|
-
def underscore(str)
|
86
|
-
str.gsub(/([a-z])([A-Z])/, '\1_\2').downcase
|
87
|
-
end
|
31
|
+
def prefixes_by_size(size)
|
32
|
+
@@sized_prefixes ||= {}
|
33
|
+
return @@sized_prefixes[size] if @@sized_prefixes.key?(size)
|
88
34
|
|
89
|
-
|
90
|
-
dims.each do |key, value|
|
91
|
-
value[:vector] = vector(value)
|
92
|
-
value[:id] = key
|
93
|
-
end
|
35
|
+
@@sized_prefixes[size] = prefixes_array.select { |p| p.size == size }
|
94
36
|
end
|
95
37
|
|
96
38
|
def valid_path(file_name)
|
data/lib/unitsml/utility.rb
CHANGED
@@ -1,12 +1,12 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require "
|
4
|
-
require "
|
3
|
+
require "unitsml/model/unit"
|
4
|
+
require "unitsml/model/prefix"
|
5
|
+
require "unitsml/model/quantity"
|
6
|
+
require "unitsml/model/dimension"
|
7
|
+
|
5
8
|
module Unitsml
|
6
9
|
module Utility
|
7
|
-
Ox.default_options = { encoding: "UTF-8" }
|
8
|
-
|
9
|
-
UNITSML_NS = "https://schema.unitsml.org/unitsml/1.0".freeze
|
10
10
|
# Unit to dimension
|
11
11
|
U2D = {
|
12
12
|
"m" => { dimension: "Length", order: 1, symbol: "L" },
|
@@ -45,10 +45,12 @@ module Unitsml
|
|
45
45
|
].freeze
|
46
46
|
|
47
47
|
class << self
|
48
|
-
|
48
|
+
def unit_instance(unit)
|
49
|
+
Unitsdb.units.find_by_symbol_id(unit)
|
50
|
+
end
|
49
51
|
|
50
|
-
def
|
51
|
-
Unitsdb.
|
52
|
+
def quantity_instance(id)
|
53
|
+
Unitsdb.quantities.find_by_id(id)
|
52
54
|
end
|
53
55
|
|
54
56
|
def units2dimensions(units)
|
@@ -69,10 +71,9 @@ module Unitsml
|
|
69
71
|
def dim_id(dims)
|
70
72
|
return nil if dims.nil? || dims.empty?
|
71
73
|
|
72
|
-
dimensions = Unitsdb.dimensions_hash.values
|
73
74
|
dim_hash = dims.each_with_object({}) { |h, m| m[h[:dimension]] = h }
|
74
75
|
dims_vector = DIMS_VECTOR.map { |h| dim_hash.dig(h, :exponent) }.join(":")
|
75
|
-
id = dimensions.
|
76
|
+
id = Unitsdb.dimensions.find_by_vector(dims_vector)&.id and return id.to_s
|
76
77
|
"D_" + dims.map do |d|
|
77
78
|
(U2D.dig(d[:unit], :symbol) || Dim2D.dig(d[:id], :symbol)) +
|
78
79
|
(d[:exponent] == 1 ? "" : float_to_display(d[:exponent]))
|
@@ -86,18 +87,18 @@ module Unitsml
|
|
86
87
|
def decompose_unit(u)
|
87
88
|
if u&.unit_name == "g" || u.system_type == "SI_base"
|
88
89
|
{ unit: u, prefix: u&.prefix }
|
89
|
-
elsif
|
90
|
+
elsif u.si_derived_bases.empty?
|
90
91
|
{ unit: Unit.new("unknown") }
|
91
92
|
else
|
92
|
-
u.si_derived_bases.each_with_object([]) do |k,
|
93
|
-
prefix = if !k
|
94
|
-
combine_prefixes(prefix_object(k
|
93
|
+
u.si_derived_bases.each_with_object([]) do |k, object|
|
94
|
+
prefix = if !k.prefix.nil? && !k.prefix.empty?
|
95
|
+
combine_prefixes(prefix_object(k.prefix), u.prefix)
|
95
96
|
else
|
96
97
|
u.prefix
|
97
98
|
end
|
98
|
-
unit_name = Unitsdb.
|
99
|
-
exponent = (k
|
100
|
-
|
99
|
+
unit_name = Unitsdb.units.find_by_id(k.id).unit_symbols.first.id
|
100
|
+
exponent = (k.power&.to_i || 1) * (u.power_numerator&.to_f || 1)
|
101
|
+
object << { prefix: prefix,
|
101
102
|
unit: Unit.new(unit_name, exponent, prefix: prefix),
|
102
103
|
}
|
103
104
|
end
|
@@ -120,9 +121,9 @@ module Unitsml
|
|
120
121
|
|
121
122
|
def prefix_object(prefix)
|
122
123
|
return prefix unless prefix.is_a?(String)
|
123
|
-
return nil unless Unitsdb.
|
124
|
+
return nil unless Unitsdb.prefixes_array.any?(prefix)
|
124
125
|
|
125
|
-
|
126
|
+
Prefix.new(prefix)
|
126
127
|
end
|
127
128
|
|
128
129
|
def combine_prefixes(p1, p2)
|
@@ -131,7 +132,7 @@ module Unitsml
|
|
131
132
|
return p2.symbolid if p1.nil?
|
132
133
|
return "unknown" if p1.base != p2.base
|
133
134
|
|
134
|
-
Unitsdb.
|
135
|
+
Unitsdb.prefixes_array.each do |prefix_name|
|
135
136
|
p = prefix_object(prefix_name)
|
136
137
|
return p if p.base == p1.base && p.power == p1.power + p2.power
|
137
138
|
end
|
@@ -139,15 +140,16 @@ module Unitsml
|
|
139
140
|
"unknown"
|
140
141
|
end
|
141
142
|
|
142
|
-
def unit(units, formula, dims, norm_text, name)
|
143
|
-
attributes = {
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
143
|
+
def unit(units, formula, dims, norm_text, name, options)
|
144
|
+
attributes = {
|
145
|
+
id: unit_id(norm_text),
|
146
|
+
system: unitsystem(units),
|
147
|
+
name: unitname(units, norm_text, name),
|
148
|
+
symbol: unitsymbols(formula, options),
|
149
|
+
root_units: rootunits(units),
|
150
|
+
}
|
151
|
+
attributes[:dimension_url] = "##{dim_id(dims)}" if dims
|
152
|
+
Model::Unit.new(attributes).to_xml
|
151
153
|
.gsub("<", "<")
|
152
154
|
.gsub(">", ">")
|
153
155
|
.gsub("&", "&")
|
@@ -156,8 +158,9 @@ module Unitsml
|
|
156
158
|
end
|
157
159
|
|
158
160
|
def unitname(units, text, name)
|
159
|
-
|
160
|
-
|
161
|
+
Model::Units::Name.new(
|
162
|
+
name: unit_instance(text)&.unit_name&.first || text
|
163
|
+
)
|
161
164
|
end
|
162
165
|
|
163
166
|
def postprocess_normtext(units)
|
@@ -168,47 +171,44 @@ module Unitsml
|
|
168
171
|
unit.power_numerator && unit.power_numerator != "1" ? "^#{unit.power_numerator}" : ""
|
169
172
|
end
|
170
173
|
|
171
|
-
def unitsymbols(formula)
|
172
|
-
[
|
173
|
-
(
|
174
|
-
|
175
|
-
]
|
174
|
+
def unitsymbols(formula, options)
|
175
|
+
%w[HTML MathMl].map do |lang|
|
176
|
+
Model::Units::Symbol.new(type: lang, content: formula.public_send(:"to_#{lang.downcase}", options))
|
177
|
+
end
|
176
178
|
end
|
177
179
|
|
178
180
|
def unitsystem(units)
|
179
181
|
ret = []
|
180
182
|
if units.any? { |u| u.system_name != "SI" }
|
181
|
-
ret <<
|
183
|
+
ret << Model::Units::System.new(name: "not_SI", type: "not_SI")
|
182
184
|
end
|
183
185
|
if units.any? { |u| u.system_name == "SI" }
|
184
186
|
if units.size == 1
|
185
187
|
base = units[0].system_type == "SI-base"
|
186
188
|
base = true if units[0].unit_name == "g" && units[0]&.prefix_name == "k"
|
187
189
|
end
|
188
|
-
ret <<
|
190
|
+
ret << Model::Units::System.new(name: "SI", type: (base ? 'SI_base' : 'SI_derived'))
|
189
191
|
end
|
190
192
|
ret
|
191
193
|
end
|
192
194
|
|
193
195
|
def dimension(norm_text)
|
194
|
-
|
195
|
-
|
196
|
-
|
197
|
-
|
198
|
-
|
199
|
-
|
200
|
-
|
201
|
-
dimid2dimensions(dim_id)&.compact&.map { |u| dimension1(u) }
|
202
|
-
)
|
203
|
-
)
|
196
|
+
dim_url = unit_instance(norm_text)&.dimension_url
|
197
|
+
return unless dim_url
|
198
|
+
|
199
|
+
dim_id = dim_url.sub("#", '')
|
200
|
+
dim_attrs = { id: dim_id }
|
201
|
+
dimid2dimensions(dim_id)&.compact&.each { |u| dimension1(u, dim_attrs) }
|
202
|
+
Model::Dimension.new(dim_attrs).to_xml
|
204
203
|
end
|
205
204
|
|
206
|
-
def dimension1(dim)
|
207
|
-
|
205
|
+
def dimension1(dim, dims_hash)
|
206
|
+
dim_name = dim[:dimension]
|
207
|
+
dim_klass = Model::DimensionQuantities.const_get(dim_name)
|
208
|
+
dims_hash[underscore(dim_name).to_sym] = dim_klass.new(
|
208
209
|
symbol: dim[:symbol],
|
209
|
-
|
210
|
-
|
211
|
-
ox_element(dim[:dimension], attributes: attributes)
|
210
|
+
power_numerator: float_to_display(dim[:exponent])
|
211
|
+
)
|
212
212
|
end
|
213
213
|
|
214
214
|
def float_to_display(float)
|
@@ -216,97 +216,79 @@ module Unitsml
|
|
216
216
|
end
|
217
217
|
|
218
218
|
def dimid2dimensions(normtext)
|
219
|
-
dims
|
220
|
-
dims&.
|
221
|
-
humanized =
|
219
|
+
dims = Unitsdb.dimensions.find_by_id(normtext)
|
220
|
+
dims&.processed_keys&.map do |processed_key|
|
221
|
+
humanized = processed_key.split("_").map(&:capitalize).join
|
222
222
|
next unless DIMS_VECTOR.include?(humanized)
|
223
223
|
|
224
|
+
dim_quantity = dims.public_send(processed_key)
|
224
225
|
{
|
225
226
|
dimension: humanized,
|
226
|
-
symbol:
|
227
|
-
exponent:
|
227
|
+
symbol: dim_quantity.symbol,
|
228
|
+
exponent: dim_quantity.power_numerator,
|
228
229
|
}
|
229
230
|
end
|
230
231
|
end
|
231
232
|
|
232
|
-
def prefixes(units)
|
233
|
+
def prefixes(units, options)
|
233
234
|
uniq_prefixes = units.map { |unit| unit.prefix }.compact.uniq {|d| d.prefix_name }
|
234
|
-
uniq_prefixes.map do |
|
235
|
-
|
236
|
-
|
237
|
-
|
238
|
-
|
239
|
-
|
240
|
-
|
241
|
-
|
242
|
-
|
243
|
-
|
235
|
+
uniq_prefixes.map do |prefix|
|
236
|
+
prefix_attrs = { prefix_base: prefix&.base, prefix_power: prefix&.power, id: prefix&.id }
|
237
|
+
type_and_methods = { ASCII: :to_asciimath, unicode: :to_unicode, LaTex: :to_latex, HTML: :to_html }
|
238
|
+
prefix_attrs[:name] = Model::Prefixes::Name.new(content: prefix&.name)
|
239
|
+
prefix_attrs[:symbol] = type_and_methods.map do |type, method_name|
|
240
|
+
Model::Prefixes::Symbol.new(
|
241
|
+
type: type,
|
242
|
+
content: prefix&.public_send(method_name, options),
|
243
|
+
)
|
244
|
+
end
|
245
|
+
Model::Prefix.new(prefix_attrs).to_xml.gsub("&", "&")
|
244
246
|
end.join("\n")
|
245
247
|
end
|
246
248
|
|
247
249
|
def rootunits(units)
|
248
250
|
return if units.size == 1 && !units[0].prefix
|
249
251
|
|
250
|
-
|
251
|
-
|
252
|
-
attributes =
|
253
|
-
|
254
|
-
|
255
|
-
|
256
|
-
root_unit << ox_element("EnumeratedRootUnit", attributes: attributes)
|
252
|
+
enum_root_units = units.map do |unit|
|
253
|
+
attributes = { unit: unit.enumerated_name }
|
254
|
+
attributes[:prefix] = unit.prefix_name if unit.prefix
|
255
|
+
unit.power_numerator && unit.power_numerator != "1" and
|
256
|
+
attributes[:power_numerator] = unit.power_numerator
|
257
|
+
Model::Units::EnumeratedRootUnit.new(attributes)
|
257
258
|
end
|
258
|
-
|
259
|
+
Model::Units::RootUnits.new(enumerated_root_unit: enum_root_units)
|
259
260
|
end
|
260
261
|
|
261
262
|
def unit_id(text)
|
262
263
|
norm_text = text
|
263
264
|
text = text&.gsub(/[()]/, "")
|
264
|
-
|
265
|
-
|
266
|
-
"U_#{unit_hash ? unit_hash[:id]&.gsub(/'/, '_') : norm_text&.gsub(/\*/, '.')&.gsub(/\^/, '')}"
|
265
|
+
unit = unit_instance(norm_text)
|
266
|
+
"U_#{unit ? unit.id&.gsub(/'/, '_') : norm_text&.gsub(/\*/, '.')&.gsub(/\^/, '')}"
|
267
267
|
end
|
268
268
|
|
269
269
|
def dimension_components(dims)
|
270
270
|
return if dims.nil? || dims.empty?
|
271
271
|
|
272
|
-
|
273
|
-
|
274
|
-
|
272
|
+
dim_attrs = { id: dim_id(dims) }
|
273
|
+
dims.map { |u| dimension1(u, dim_attrs) }
|
274
|
+
Model::Dimension.new(dim_attrs).to_xml
|
275
275
|
end
|
276
276
|
|
277
277
|
def quantity(normtext, quantity)
|
278
|
-
|
279
|
-
|
280
|
-
|
281
|
-
|
282
|
-
|
283
|
-
|
284
|
-
attributes = {
|
285
|
-
|
286
|
-
dim_url and attributes[:dimensionURL] = "#{dim_url}"
|
287
|
-
attributes[:quantityType] = "base"
|
288
|
-
quantity_element = ox_element("Quantity", attributes: attributes)
|
289
|
-
Ox.dump(update_nodes(quantity_element, quantity_name(id.sub('#', ''))))
|
278
|
+
unit = unit_instance(normtext)
|
279
|
+
return unless unit && unit.quantity_reference.size == 1 ||
|
280
|
+
quantity_instance(quantity)
|
281
|
+
|
282
|
+
id = (quantity || unit.quantity_reference&.first&.url).sub('#', '')
|
283
|
+
dim_url = unit.dimension_url
|
284
|
+
attributes = { id: id, name: quantity_name(id), dimension_url: dim_url }
|
285
|
+
Model::Quantity.new(attributes).to_xml
|
290
286
|
end
|
291
287
|
|
292
288
|
def quantity_name(id)
|
293
|
-
|
294
|
-
|
295
|
-
node = (ox_element("QuantityName", attributes: { "xml:lang": "en-US" }) << q)
|
296
|
-
ret << node
|
289
|
+
quantity_instance(id)&.quantity_name&.map do |content|
|
290
|
+
Model::Quantities::Name.new(content: content)
|
297
291
|
end
|
298
|
-
ret
|
299
|
-
end
|
300
|
-
|
301
|
-
def ox_element(node, attributes: [])
|
302
|
-
element = Ox::Element.new(node)
|
303
|
-
attributes&.each { |attr_key, attr_value| element[attr_key] = attr_value }
|
304
|
-
element
|
305
|
-
end
|
306
|
-
|
307
|
-
def update_nodes(element, nodes)
|
308
|
-
nodes&.each { |node| element << node unless node.nil? }
|
309
|
-
element
|
310
292
|
end
|
311
293
|
|
312
294
|
def string_to_html_entity(string)
|
@@ -321,6 +303,14 @@ module Unitsml
|
|
321
303
|
entities = HTMLEntities.new
|
322
304
|
entities.decode(string)
|
323
305
|
end
|
306
|
+
|
307
|
+
def underscore(str)
|
308
|
+
str.gsub(/([a-z])([A-Z])/, '\1_\2').downcase
|
309
|
+
end
|
310
|
+
|
311
|
+
def class_name(klass)
|
312
|
+
klass.name.split("::").last
|
313
|
+
end
|
324
314
|
end
|
325
315
|
end
|
326
316
|
end
|
data/lib/unitsml/version.rb
CHANGED
data/lib/unitsml.rb
CHANGED
@@ -1,3 +1,13 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Unitsml
|
4
|
+
UNITSML_NS = "https://schema.unitsml.org/unitsml/1.0".freeze
|
5
|
+
|
6
|
+
def self.parse(string)
|
7
|
+
Unitsml::Parser.new(string).parse
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
1
11
|
require "unitsml/error"
|
2
12
|
require "unitsml/sqrt"
|
3
13
|
require "unitsml/unit"
|
@@ -10,9 +20,19 @@ require "unitsml/unitsdb"
|
|
10
20
|
require "unitsml/extender"
|
11
21
|
require "unitsml/dimension"
|
12
22
|
require "unitsml/transform"
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
23
|
+
require "unitsml/unitsdb/units"
|
24
|
+
require "unitsml/unitsdb/prefixes"
|
25
|
+
require "unitsml/unitsdb/dimension"
|
26
|
+
require "unitsml/unitsdb/dimensions"
|
27
|
+
require "unitsml/unitsdb/quantities"
|
28
|
+
require "unitsml/unitsdb/dimension_quantity"
|
29
|
+
require "unitsdb/config"
|
30
|
+
Unitsdb::Config.models = {
|
31
|
+
units: Unitsml::Unitsdb::Units,
|
32
|
+
prefixes: Unitsml::Unitsdb::Prefixes,
|
33
|
+
dimension: Unitsml::Unitsdb::Dimension,
|
34
|
+
dimensions: Unitsml::Unitsdb::Dimensions,
|
35
|
+
quantities: Unitsml::Unitsdb::Quantities,
|
36
|
+
dimension_quantity: Unitsml::Unitsdb::DimensionQuantity,
|
37
|
+
}
|
38
|
+
require "unitsdb"
|
data/unitsml.gemspec
CHANGED
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.4.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: 2025-02-
|
11
|
+
date: 2025-02-25 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: htmlentities
|
@@ -25,7 +25,7 @@ dependencies:
|
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '0'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
|
-
name:
|
28
|
+
name: mml
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
31
|
- - ">="
|
@@ -52,6 +52,20 @@ dependencies:
|
|
52
52
|
- - ">="
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: '0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: unitsdb
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ">="
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
type: :runtime
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ">="
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0'
|
55
69
|
description: Gem-wrapper for working with unitsdb
|
56
70
|
email:
|
57
71
|
- open.source@ribose.com
|
@@ -59,6 +73,8 @@ executables: []
|
|
59
73
|
extensions: []
|
60
74
|
extra_rdoc_files: []
|
61
75
|
files:
|
76
|
+
- ".github/workflows/dependent-repos.json"
|
77
|
+
- ".github/workflows/depenedent-gems.yml"
|
62
78
|
- ".github/workflows/rake.yml"
|
63
79
|
- ".github/workflows/release.yml"
|
64
80
|
- ".gitignore"
|
@@ -78,6 +94,27 @@ files:
|
|
78
94
|
- lib/unitsml/errors/plurimath_load_error.rb
|
79
95
|
- lib/unitsml/extender.rb
|
80
96
|
- lib/unitsml/formula.rb
|
97
|
+
- lib/unitsml/model/dimension.rb
|
98
|
+
- lib/unitsml/model/dimension_quantities/amount_of_substance.rb
|
99
|
+
- lib/unitsml/model/dimension_quantities/electric_current.rb
|
100
|
+
- lib/unitsml/model/dimension_quantities/length.rb
|
101
|
+
- lib/unitsml/model/dimension_quantities/luminous_intensity.rb
|
102
|
+
- lib/unitsml/model/dimension_quantities/mass.rb
|
103
|
+
- lib/unitsml/model/dimension_quantities/plane_angle.rb
|
104
|
+
- lib/unitsml/model/dimension_quantities/quantity.rb
|
105
|
+
- lib/unitsml/model/dimension_quantities/thermodynamic_temperature.rb
|
106
|
+
- lib/unitsml/model/dimension_quantities/time.rb
|
107
|
+
- lib/unitsml/model/prefix.rb
|
108
|
+
- lib/unitsml/model/prefixes/name.rb
|
109
|
+
- lib/unitsml/model/prefixes/symbol.rb
|
110
|
+
- lib/unitsml/model/quantities/name.rb
|
111
|
+
- lib/unitsml/model/quantity.rb
|
112
|
+
- lib/unitsml/model/unit.rb
|
113
|
+
- lib/unitsml/model/units/enumerated_root_unit.rb
|
114
|
+
- lib/unitsml/model/units/name.rb
|
115
|
+
- lib/unitsml/model/units/root_units.rb
|
116
|
+
- lib/unitsml/model/units/symbol.rb
|
117
|
+
- lib/unitsml/model/units/system.rb
|
81
118
|
- lib/unitsml/parse.rb
|
82
119
|
- lib/unitsml/parser.rb
|
83
120
|
- lib/unitsml/prefix.rb
|
@@ -85,6 +122,12 @@ files:
|
|
85
122
|
- lib/unitsml/transform.rb
|
86
123
|
- lib/unitsml/unit.rb
|
87
124
|
- lib/unitsml/unitsdb.rb
|
125
|
+
- lib/unitsml/unitsdb/dimension.rb
|
126
|
+
- lib/unitsml/unitsdb/dimension_quantity.rb
|
127
|
+
- lib/unitsml/unitsdb/dimensions.rb
|
128
|
+
- lib/unitsml/unitsdb/prefixes.rb
|
129
|
+
- lib/unitsml/unitsdb/quantities.rb
|
130
|
+
- lib/unitsml/unitsdb/units.rb
|
88
131
|
- lib/unitsml/utility.rb
|
89
132
|
- lib/unitsml/version.rb
|
90
133
|
- unitsdb/dimensions.yaml
|