unitsml 0.2.9 → 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 +10 -1
- data/lib/unitsml/dimension.rb +47 -38
- data/lib/unitsml/error.rb +8 -0
- data/lib/unitsml/errors/plurimath_load_error.rb +19 -0
- data/lib/unitsml/extender.rb +24 -10
- data/lib/unitsml/formula.rb +87 -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 +102 -108
- data/lib/unitsml/version.rb +1 -1
- data/lib/unitsml.rb +27 -6
- data/unitsml.gemspec +3 -8
- metadata +42 -81
@@ -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,10 +1,14 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require "
|
3
|
+
require "unitsml/model/unit"
|
4
|
+
require "unitsml/model/prefix"
|
5
|
+
require "unitsml/model/quantity"
|
6
|
+
require "unitsml/model/dimension"
|
7
|
+
|
4
8
|
module Unitsml
|
5
9
|
module Utility
|
10
|
+
Ox.default_options = { encoding: "UTF-8" }
|
6
11
|
|
7
|
-
UNITSML_NS = "https://schema.unitsml.org/unitsml/1.0".freeze
|
8
12
|
# Unit to dimension
|
9
13
|
U2D = {
|
10
14
|
"m" => { dimension: "Length", order: 1, symbol: "L" },
|
@@ -43,10 +47,12 @@ module Unitsml
|
|
43
47
|
].freeze
|
44
48
|
|
45
49
|
class << self
|
46
|
-
|
50
|
+
def unit_instance(unit)
|
51
|
+
Unitsdb.units.find_by_symbol_id(unit)
|
52
|
+
end
|
47
53
|
|
48
|
-
def
|
49
|
-
Unitsdb.
|
54
|
+
def quantity_instance(id)
|
55
|
+
Unitsdb.quantities.find_by_id(id)
|
50
56
|
end
|
51
57
|
|
52
58
|
def units2dimensions(units)
|
@@ -67,10 +73,9 @@ module Unitsml
|
|
67
73
|
def dim_id(dims)
|
68
74
|
return nil if dims.nil? || dims.empty?
|
69
75
|
|
70
|
-
dimensions = Unitsdb.dimensions_hash.values
|
71
76
|
dim_hash = dims.each_with_object({}) { |h, m| m[h[:dimension]] = h }
|
72
77
|
dims_vector = DIMS_VECTOR.map { |h| dim_hash.dig(h, :exponent) }.join(":")
|
73
|
-
id = dimensions.
|
78
|
+
id = Unitsdb.dimensions.find_by_vector(dims_vector)&.id and return id.to_s
|
74
79
|
"D_" + dims.map do |d|
|
75
80
|
(U2D.dig(d[:unit], :symbol) || Dim2D.dig(d[:id], :symbol)) +
|
76
81
|
(d[:exponent] == 1 ? "" : float_to_display(d[:exponent]))
|
@@ -84,18 +89,18 @@ module Unitsml
|
|
84
89
|
def decompose_unit(u)
|
85
90
|
if u&.unit_name == "g" || u.system_type == "SI_base"
|
86
91
|
{ unit: u, prefix: u&.prefix }
|
87
|
-
elsif
|
92
|
+
elsif u.si_derived_bases.empty?
|
88
93
|
{ unit: Unit.new("unknown") }
|
89
94
|
else
|
90
|
-
u.si_derived_bases.each_with_object([]) do |k,
|
91
|
-
prefix = if !k
|
92
|
-
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)
|
93
98
|
else
|
94
99
|
u.prefix
|
95
100
|
end
|
96
|
-
unit_name = Unitsdb.
|
97
|
-
exponent = (k
|
98
|
-
|
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,
|
99
104
|
unit: Unit.new(unit_name, exponent, prefix: prefix),
|
100
105
|
}
|
101
106
|
end
|
@@ -118,9 +123,9 @@ module Unitsml
|
|
118
123
|
|
119
124
|
def prefix_object(prefix)
|
120
125
|
return prefix unless prefix.is_a?(String)
|
121
|
-
return nil unless Unitsdb.
|
126
|
+
return nil unless Unitsdb.prefixes_array.any?(prefix)
|
122
127
|
|
123
|
-
|
128
|
+
Prefix.new(prefix)
|
124
129
|
end
|
125
130
|
|
126
131
|
def combine_prefixes(p1, p2)
|
@@ -129,7 +134,7 @@ module Unitsml
|
|
129
134
|
return p2.symbolid if p1.nil?
|
130
135
|
return "unknown" if p1.base != p2.base
|
131
136
|
|
132
|
-
Unitsdb.
|
137
|
+
Unitsdb.prefixes_array.each do |prefix_name|
|
133
138
|
p = prefix_object(prefix_name)
|
134
139
|
return p if p.base == p1.base && p.power == p1.power + p2.power
|
135
140
|
end
|
@@ -137,15 +142,16 @@ module Unitsml
|
|
137
142
|
"unknown"
|
138
143
|
end
|
139
144
|
|
140
|
-
def unit(units, formula, dims, norm_text, name)
|
141
|
-
attributes = {
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
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
|
149
155
|
.gsub("<", "<")
|
150
156
|
.gsub(">", ">")
|
151
157
|
.gsub("&", "&")
|
@@ -154,8 +160,9 @@ module Unitsml
|
|
154
160
|
end
|
155
161
|
|
156
162
|
def unitname(units, text, name)
|
157
|
-
|
158
|
-
|
163
|
+
Model::Units::Name.new(
|
164
|
+
name: unit_instance(text)&.unit_name&.first || text
|
165
|
+
)
|
159
166
|
end
|
160
167
|
|
161
168
|
def postprocess_normtext(units)
|
@@ -166,47 +173,44 @@ module Unitsml
|
|
166
173
|
unit.power_numerator && unit.power_numerator != "1" ? "^#{unit.power_numerator}" : ""
|
167
174
|
end
|
168
175
|
|
169
|
-
def unitsymbols(formula)
|
170
|
-
[
|
171
|
-
(
|
172
|
-
|
173
|
-
]
|
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
|
174
180
|
end
|
175
181
|
|
176
182
|
def unitsystem(units)
|
177
183
|
ret = []
|
178
184
|
if units.any? { |u| u.system_name != "SI" }
|
179
|
-
ret <<
|
185
|
+
ret << Model::Units::System.new(name: "not_SI", type: "not_SI")
|
180
186
|
end
|
181
187
|
if units.any? { |u| u.system_name == "SI" }
|
182
188
|
if units.size == 1
|
183
189
|
base = units[0].system_type == "SI-base"
|
184
190
|
base = true if units[0].unit_name == "g" && units[0]&.prefix_name == "k"
|
185
191
|
end
|
186
|
-
ret <<
|
192
|
+
ret << Model::Units::System.new(name: "SI", type: (base ? 'SI_base' : 'SI_derived'))
|
187
193
|
end
|
188
194
|
ret
|
189
195
|
end
|
190
196
|
|
191
197
|
def dimension(norm_text)
|
192
|
-
|
193
|
-
|
194
|
-
|
195
|
-
|
196
|
-
|
197
|
-
|
198
|
-
|
199
|
-
dimid2dimensions(dim_id)&.compact&.map { |u| dimension1(u) }
|
200
|
-
)
|
201
|
-
)
|
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
|
202
205
|
end
|
203
206
|
|
204
|
-
def dimension1(dim)
|
205
|
-
|
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(
|
206
211
|
symbol: dim[:symbol],
|
207
|
-
|
208
|
-
|
209
|
-
ox_element(dim[:dimension], attributes: attributes)
|
212
|
+
power_numerator: float_to_display(dim[:exponent])
|
213
|
+
)
|
210
214
|
end
|
211
215
|
|
212
216
|
def float_to_display(float)
|
@@ -214,97 +218,79 @@ module Unitsml
|
|
214
218
|
end
|
215
219
|
|
216
220
|
def dimid2dimensions(normtext)
|
217
|
-
dims
|
218
|
-
dims&.
|
219
|
-
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
|
220
224
|
next unless DIMS_VECTOR.include?(humanized)
|
221
225
|
|
226
|
+
dim_quantity = dims.public_send(processed_key)
|
222
227
|
{
|
223
228
|
dimension: humanized,
|
224
|
-
symbol:
|
225
|
-
exponent:
|
229
|
+
symbol: dim_quantity.symbol,
|
230
|
+
exponent: dim_quantity.power_numerator,
|
226
231
|
}
|
227
232
|
end
|
228
233
|
end
|
229
234
|
|
230
|
-
def prefixes(units)
|
235
|
+
def prefixes(units, options)
|
231
236
|
uniq_prefixes = units.map { |unit| unit.prefix }.compact.uniq {|d| d.prefix_name }
|
232
|
-
uniq_prefixes.map do |
|
233
|
-
|
234
|
-
|
235
|
-
|
236
|
-
|
237
|
-
|
238
|
-
|
239
|
-
|
240
|
-
|
241
|
-
|
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("&", "&")
|
242
248
|
end.join("\n")
|
243
249
|
end
|
244
250
|
|
245
251
|
def rootunits(units)
|
246
252
|
return if units.size == 1 && !units[0].prefix
|
247
253
|
|
248
|
-
|
249
|
-
|
250
|
-
attributes =
|
251
|
-
|
252
|
-
|
253
|
-
|
254
|
-
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)
|
255
260
|
end
|
256
|
-
|
261
|
+
Model::Units::RootUnits.new(enumerated_root_unit: enum_root_units)
|
257
262
|
end
|
258
263
|
|
259
264
|
def unit_id(text)
|
260
265
|
norm_text = text
|
261
266
|
text = text&.gsub(/[()]/, "")
|
262
|
-
|
263
|
-
|
264
|
-
"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(/\^/, '')}"
|
265
269
|
end
|
266
270
|
|
267
271
|
def dimension_components(dims)
|
268
272
|
return if dims.nil? || dims.empty?
|
269
273
|
|
270
|
-
|
271
|
-
|
272
|
-
|
274
|
+
dim_attrs = { id: dim_id(dims) }
|
275
|
+
dims.map { |u| dimension1(u, dim_attrs) }
|
276
|
+
Model::Dimension.new(dim_attrs).to_xml
|
273
277
|
end
|
274
278
|
|
275
279
|
def quantity(normtext, quantity)
|
276
|
-
|
277
|
-
|
278
|
-
|
279
|
-
|
280
|
-
|
281
|
-
|
282
|
-
attributes = {
|
283
|
-
|
284
|
-
dim_url and attributes[:dimensionURL] = "#{dim_url}"
|
285
|
-
attributes[:quantityType] = "base"
|
286
|
-
quantity_element = ox_element("Quantity", attributes: attributes)
|
287
|
-
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
|
288
288
|
end
|
289
289
|
|
290
290
|
def quantity_name(id)
|
291
|
-
|
292
|
-
|
293
|
-
node = (ox_element("QuantityName", attributes: { "xml:lang": "en-US" }) << q)
|
294
|
-
ret << node
|
291
|
+
quantity_instance(id)&.quantity_name&.map do |content|
|
292
|
+
Model::Quantities::Name.new(content: content)
|
295
293
|
end
|
296
|
-
ret
|
297
|
-
end
|
298
|
-
|
299
|
-
def ox_element(node, attributes: [])
|
300
|
-
element = Ox::Element.new(node)
|
301
|
-
attributes&.each { |attr_key, attr_value| element[attr_key] = attr_value }
|
302
|
-
element
|
303
|
-
end
|
304
|
-
|
305
|
-
def update_nodes(element, nodes)
|
306
|
-
nodes&.each { |node| element << node unless node.nil? }
|
307
|
-
element
|
308
294
|
end
|
309
295
|
|
310
296
|
def string_to_html_entity(string)
|
@@ -319,6 +305,14 @@ module Unitsml
|
|
319
305
|
entities = HTMLEntities.new
|
320
306
|
entities.decode(string)
|
321
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
|
322
316
|
end
|
323
317
|
end
|
324
318
|
end
|
data/lib/unitsml/version.rb
CHANGED
data/lib/unitsml.rb
CHANGED
@@ -1,3 +1,14 @@
|
|
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
|
+
|
11
|
+
require "unitsml/error"
|
1
12
|
require "unitsml/sqrt"
|
2
13
|
require "unitsml/unit"
|
3
14
|
require "unitsml/parse"
|
@@ -9,9 +20,19 @@ require "unitsml/unitsdb"
|
|
9
20
|
require "unitsml/extender"
|
10
21
|
require "unitsml/dimension"
|
11
22
|
require "unitsml/transform"
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
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
@@ -28,12 +28,7 @@ Gem::Specification.new do |spec|
|
|
28
28
|
spec.require_paths = ["lib", "unitsdb/**/*.yaml"]
|
29
29
|
|
30
30
|
spec.add_dependency "htmlentities"
|
31
|
-
spec.add_dependency "
|
32
|
-
spec.
|
33
|
-
spec.
|
34
|
-
spec.add_development_dependency "pry", "~> 0.12.2"
|
35
|
-
spec.add_development_dependency "rake", "~> 12.0"
|
36
|
-
spec.add_development_dependency "rspec", "~> 3.6"
|
37
|
-
spec.add_development_dependency "rubocop", "= 0.54.0"
|
38
|
-
spec.add_development_dependency "simplecov", "~> 0.15"
|
31
|
+
spec.add_dependency "mml"
|
32
|
+
spec.add_dependency "parslet"
|
33
|
+
spec.add_dependency "unitsdb"
|
39
34
|
end
|