unitsml 0.3.0 → 0.4.0
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 -109
- 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,14 @@
|
|
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
10
|
Ox.default_options = { encoding: "UTF-8" }
|
8
11
|
|
9
|
-
UNITSML_NS = "https://schema.unitsml.org/unitsml/1.0".freeze
|
10
12
|
# Unit to dimension
|
11
13
|
U2D = {
|
12
14
|
"m" => { dimension: "Length", order: 1, symbol: "L" },
|
@@ -45,10 +47,12 @@ module Unitsml
|
|
45
47
|
].freeze
|
46
48
|
|
47
49
|
class << self
|
48
|
-
|
50
|
+
def unit_instance(unit)
|
51
|
+
Unitsdb.units.find_by_symbol_id(unit)
|
52
|
+
end
|
49
53
|
|
50
|
-
def
|
51
|
-
Unitsdb.
|
54
|
+
def quantity_instance(id)
|
55
|
+
Unitsdb.quantities.find_by_id(id)
|
52
56
|
end
|
53
57
|
|
54
58
|
def units2dimensions(units)
|
@@ -69,10 +73,9 @@ module Unitsml
|
|
69
73
|
def dim_id(dims)
|
70
74
|
return nil if dims.nil? || dims.empty?
|
71
75
|
|
72
|
-
dimensions = Unitsdb.dimensions_hash.values
|
73
76
|
dim_hash = dims.each_with_object({}) { |h, m| m[h[:dimension]] = h }
|
74
77
|
dims_vector = DIMS_VECTOR.map { |h| dim_hash.dig(h, :exponent) }.join(":")
|
75
|
-
id = dimensions.
|
78
|
+
id = Unitsdb.dimensions.find_by_vector(dims_vector)&.id and return id.to_s
|
76
79
|
"D_" + dims.map do |d|
|
77
80
|
(U2D.dig(d[:unit], :symbol) || Dim2D.dig(d[:id], :symbol)) +
|
78
81
|
(d[:exponent] == 1 ? "" : float_to_display(d[:exponent]))
|
@@ -86,18 +89,18 @@ module Unitsml
|
|
86
89
|
def decompose_unit(u)
|
87
90
|
if u&.unit_name == "g" || u.system_type == "SI_base"
|
88
91
|
{ unit: u, prefix: u&.prefix }
|
89
|
-
elsif
|
92
|
+
elsif u.si_derived_bases.empty?
|
90
93
|
{ unit: Unit.new("unknown") }
|
91
94
|
else
|
92
|
-
u.si_derived_bases.each_with_object([]) do |k,
|
93
|
-
prefix = if !k
|
94
|
-
combine_prefixes(prefix_object(k
|
95
|
+
u.si_derived_bases.each_with_object([]) do |k, object|
|
96
|
+
prefix = if !k.prefix.nil? && !k.prefix.empty?
|
97
|
+
combine_prefixes(prefix_object(k.prefix), u.prefix)
|
95
98
|
else
|
96
99
|
u.prefix
|
97
100
|
end
|
98
|
-
unit_name = Unitsdb.
|
99
|
-
exponent = (k
|
100
|
-
|
101
|
+
unit_name = Unitsdb.units.find_by_id(k.id).unit_symbols.first.id
|
102
|
+
exponent = (k.power&.to_i || 1) * (u.power_numerator&.to_f || 1)
|
103
|
+
object << { prefix: prefix,
|
101
104
|
unit: Unit.new(unit_name, exponent, prefix: prefix),
|
102
105
|
}
|
103
106
|
end
|
@@ -120,9 +123,9 @@ module Unitsml
|
|
120
123
|
|
121
124
|
def prefix_object(prefix)
|
122
125
|
return prefix unless prefix.is_a?(String)
|
123
|
-
return nil unless Unitsdb.
|
126
|
+
return nil unless Unitsdb.prefixes_array.any?(prefix)
|
124
127
|
|
125
|
-
|
128
|
+
Prefix.new(prefix)
|
126
129
|
end
|
127
130
|
|
128
131
|
def combine_prefixes(p1, p2)
|
@@ -131,7 +134,7 @@ module Unitsml
|
|
131
134
|
return p2.symbolid if p1.nil?
|
132
135
|
return "unknown" if p1.base != p2.base
|
133
136
|
|
134
|
-
Unitsdb.
|
137
|
+
Unitsdb.prefixes_array.each do |prefix_name|
|
135
138
|
p = prefix_object(prefix_name)
|
136
139
|
return p if p.base == p1.base && p.power == p1.power + p2.power
|
137
140
|
end
|
@@ -139,15 +142,16 @@ module Unitsml
|
|
139
142
|
"unknown"
|
140
143
|
end
|
141
144
|
|
142
|
-
def unit(units, formula, dims, norm_text, name)
|
143
|
-
attributes = {
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
145
|
+
def unit(units, formula, dims, norm_text, name, options)
|
146
|
+
attributes = {
|
147
|
+
id: unit_id(norm_text),
|
148
|
+
system: unitsystem(units),
|
149
|
+
name: unitname(units, norm_text, name),
|
150
|
+
symbol: unitsymbols(formula, options),
|
151
|
+
root_units: rootunits(units),
|
152
|
+
}
|
153
|
+
attributes[:dimension_url] = "##{dim_id(dims)}" if dims
|
154
|
+
Model::Unit.new(attributes).to_xml
|
151
155
|
.gsub("<", "<")
|
152
156
|
.gsub(">", ">")
|
153
157
|
.gsub("&", "&")
|
@@ -156,8 +160,9 @@ module Unitsml
|
|
156
160
|
end
|
157
161
|
|
158
162
|
def unitname(units, text, name)
|
159
|
-
|
160
|
-
|
163
|
+
Model::Units::Name.new(
|
164
|
+
name: unit_instance(text)&.unit_name&.first || text
|
165
|
+
)
|
161
166
|
end
|
162
167
|
|
163
168
|
def postprocess_normtext(units)
|
@@ -168,47 +173,44 @@ module Unitsml
|
|
168
173
|
unit.power_numerator && unit.power_numerator != "1" ? "^#{unit.power_numerator}" : ""
|
169
174
|
end
|
170
175
|
|
171
|
-
def unitsymbols(formula)
|
172
|
-
[
|
173
|
-
(
|
174
|
-
|
175
|
-
]
|
176
|
+
def unitsymbols(formula, options)
|
177
|
+
%w[HTML MathMl].map do |lang|
|
178
|
+
Model::Units::Symbol.new(type: lang, content: formula.public_send(:"to_#{lang.downcase}", options))
|
179
|
+
end
|
176
180
|
end
|
177
181
|
|
178
182
|
def unitsystem(units)
|
179
183
|
ret = []
|
180
184
|
if units.any? { |u| u.system_name != "SI" }
|
181
|
-
ret <<
|
185
|
+
ret << Model::Units::System.new(name: "not_SI", type: "not_SI")
|
182
186
|
end
|
183
187
|
if units.any? { |u| u.system_name == "SI" }
|
184
188
|
if units.size == 1
|
185
189
|
base = units[0].system_type == "SI-base"
|
186
190
|
base = true if units[0].unit_name == "g" && units[0]&.prefix_name == "k"
|
187
191
|
end
|
188
|
-
ret <<
|
192
|
+
ret << Model::Units::System.new(name: "SI", type: (base ? 'SI_base' : 'SI_derived'))
|
189
193
|
end
|
190
194
|
ret
|
191
195
|
end
|
192
196
|
|
193
197
|
def dimension(norm_text)
|
194
|
-
|
195
|
-
|
196
|
-
|
197
|
-
|
198
|
-
|
199
|
-
|
200
|
-
|
201
|
-
dimid2dimensions(dim_id)&.compact&.map { |u| dimension1(u) }
|
202
|
-
)
|
203
|
-
)
|
198
|
+
dim_url = unit_instance(norm_text)&.dimension_url
|
199
|
+
return unless dim_url
|
200
|
+
|
201
|
+
dim_id = dim_url.sub("#", '')
|
202
|
+
dim_attrs = { id: dim_id }
|
203
|
+
dimid2dimensions(dim_id)&.compact&.each { |u| dimension1(u, dim_attrs) }
|
204
|
+
Model::Dimension.new(dim_attrs).to_xml
|
204
205
|
end
|
205
206
|
|
206
|
-
def dimension1(dim)
|
207
|
-
|
207
|
+
def dimension1(dim, dims_hash)
|
208
|
+
dim_name = dim[:dimension]
|
209
|
+
dim_klass = Model::DimensionQuantities.const_get(dim_name)
|
210
|
+
dims_hash[underscore(dim_name).to_sym] = dim_klass.new(
|
208
211
|
symbol: dim[:symbol],
|
209
|
-
|
210
|
-
|
211
|
-
ox_element(dim[:dimension], attributes: attributes)
|
212
|
+
power_numerator: float_to_display(dim[:exponent])
|
213
|
+
)
|
212
214
|
end
|
213
215
|
|
214
216
|
def float_to_display(float)
|
@@ -216,97 +218,79 @@ module Unitsml
|
|
216
218
|
end
|
217
219
|
|
218
220
|
def dimid2dimensions(normtext)
|
219
|
-
dims
|
220
|
-
dims&.
|
221
|
-
humanized =
|
221
|
+
dims = Unitsdb.dimensions.find_by_id(normtext)
|
222
|
+
dims&.processed_keys&.map do |processed_key|
|
223
|
+
humanized = processed_key.split("_").map(&:capitalize).join
|
222
224
|
next unless DIMS_VECTOR.include?(humanized)
|
223
225
|
|
226
|
+
dim_quantity = dims.public_send(processed_key)
|
224
227
|
{
|
225
228
|
dimension: humanized,
|
226
|
-
symbol:
|
227
|
-
exponent:
|
229
|
+
symbol: dim_quantity.symbol,
|
230
|
+
exponent: dim_quantity.power_numerator,
|
228
231
|
}
|
229
232
|
end
|
230
233
|
end
|
231
234
|
|
232
|
-
def prefixes(units)
|
235
|
+
def prefixes(units, options)
|
233
236
|
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
|
-
|
237
|
+
uniq_prefixes.map do |prefix|
|
238
|
+
prefix_attrs = { prefix_base: prefix&.base, prefix_power: prefix&.power, id: prefix&.id }
|
239
|
+
type_and_methods = { ASCII: :to_asciimath, unicode: :to_unicode, LaTex: :to_latex, HTML: :to_html }
|
240
|
+
prefix_attrs[:name] = Model::Prefixes::Name.new(content: prefix&.name)
|
241
|
+
prefix_attrs[:symbol] = type_and_methods.map do |type, method_name|
|
242
|
+
Model::Prefixes::Symbol.new(
|
243
|
+
type: type,
|
244
|
+
content: prefix&.public_send(method_name, options),
|
245
|
+
)
|
246
|
+
end
|
247
|
+
Model::Prefix.new(prefix_attrs).to_xml.gsub("&", "&")
|
244
248
|
end.join("\n")
|
245
249
|
end
|
246
250
|
|
247
251
|
def rootunits(units)
|
248
252
|
return if units.size == 1 && !units[0].prefix
|
249
253
|
|
250
|
-
|
251
|
-
|
252
|
-
attributes =
|
253
|
-
|
254
|
-
|
255
|
-
|
256
|
-
root_unit << ox_element("EnumeratedRootUnit", attributes: attributes)
|
254
|
+
enum_root_units = units.map do |unit|
|
255
|
+
attributes = { unit: unit.enumerated_name }
|
256
|
+
attributes[:prefix] = unit.prefix_name if unit.prefix
|
257
|
+
unit.power_numerator && unit.power_numerator != "1" and
|
258
|
+
attributes[:power_numerator] = unit.power_numerator
|
259
|
+
Model::Units::EnumeratedRootUnit.new(attributes)
|
257
260
|
end
|
258
|
-
|
261
|
+
Model::Units::RootUnits.new(enumerated_root_unit: enum_root_units)
|
259
262
|
end
|
260
263
|
|
261
264
|
def unit_id(text)
|
262
265
|
norm_text = text
|
263
266
|
text = text&.gsub(/[()]/, "")
|
264
|
-
|
265
|
-
|
266
|
-
"U_#{unit_hash ? unit_hash[:id]&.gsub(/'/, '_') : norm_text&.gsub(/\*/, '.')&.gsub(/\^/, '')}"
|
267
|
+
unit = unit_instance(norm_text)
|
268
|
+
"U_#{unit ? unit.id&.gsub(/'/, '_') : norm_text&.gsub(/\*/, '.')&.gsub(/\^/, '')}"
|
267
269
|
end
|
268
270
|
|
269
271
|
def dimension_components(dims)
|
270
272
|
return if dims.nil? || dims.empty?
|
271
273
|
|
272
|
-
|
273
|
-
|
274
|
-
|
274
|
+
dim_attrs = { id: dim_id(dims) }
|
275
|
+
dims.map { |u| dimension1(u, dim_attrs) }
|
276
|
+
Model::Dimension.new(dim_attrs).to_xml
|
275
277
|
end
|
276
278
|
|
277
279
|
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('#', ''))))
|
280
|
+
unit = unit_instance(normtext)
|
281
|
+
return unless unit && unit.quantity_reference.size == 1 ||
|
282
|
+
quantity_instance(quantity)
|
283
|
+
|
284
|
+
id = (quantity || unit.quantity_reference&.first&.url).sub('#', '')
|
285
|
+
dim_url = unit.dimension_url
|
286
|
+
attributes = { id: id, name: quantity_name(id), dimension_url: dim_url }
|
287
|
+
Model::Quantity.new(attributes).to_xml
|
290
288
|
end
|
291
289
|
|
292
290
|
def quantity_name(id)
|
293
|
-
|
294
|
-
|
295
|
-
node = (ox_element("QuantityName", attributes: { "xml:lang": "en-US" }) << q)
|
296
|
-
ret << node
|
291
|
+
quantity_instance(id)&.quantity_name&.map do |content|
|
292
|
+
Model::Quantities::Name.new(content: content)
|
297
293
|
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
294
|
end
|
311
295
|
|
312
296
|
def string_to_html_entity(string)
|
@@ -321,6 +305,14 @@ module Unitsml
|
|
321
305
|
entities = HTMLEntities.new
|
322
306
|
entities.decode(string)
|
323
307
|
end
|
308
|
+
|
309
|
+
def underscore(str)
|
310
|
+
str.gsub(/([a-z])([A-Z])/, '\1_\2').downcase
|
311
|
+
end
|
312
|
+
|
313
|
+
def class_name(klass)
|
314
|
+
klass.name.split("::").last
|
315
|
+
end
|
324
316
|
end
|
325
317
|
end
|
326
318
|
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.0
|
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-20 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
|