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.
Files changed (75) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/rake.yml +8 -0
  3. data/.github/workflows/release.yml +7 -1
  4. data/.gitmodules +0 -3
  5. data/.rubocop.yml +18 -0
  6. data/.rubocop_todo.yml +495 -0
  7. data/Gemfile +8 -3
  8. data/Rakefile +3 -1
  9. data/bin/console +1 -0
  10. data/docs/README.adoc +2 -2
  11. data/lib/unitsml/dimension.rb +48 -34
  12. data/lib/unitsml/errors/base_error.rb +8 -0
  13. data/lib/unitsml/errors/plurimath_load_error.rb +1 -1
  14. data/lib/unitsml/errors.rb +8 -0
  15. data/lib/unitsml/extender.rb +16 -11
  16. data/lib/unitsml/fenced.rb +28 -8
  17. data/lib/unitsml/fenced_numeric.rb +13 -0
  18. data/lib/unitsml/formula.rb +35 -26
  19. data/lib/unitsml/intermediate_exp_rules.rb +68 -17
  20. data/lib/unitsml/model/dimension.rb +4 -14
  21. data/lib/unitsml/model/dimension_quantities/quantity.rb +2 -0
  22. data/lib/unitsml/model/dimension_quantities.rb +21 -0
  23. data/lib/unitsml/model/prefix.rb +4 -8
  24. data/lib/unitsml/model/prefixes/name.rb +5 -4
  25. data/lib/unitsml/model/prefixes/symbol.rb +3 -2
  26. data/lib/unitsml/model/prefixes.rb +10 -0
  27. data/lib/unitsml/model/quantities/name.rb +4 -3
  28. data/lib/unitsml/model/quantities.rb +9 -0
  29. data/lib/unitsml/model/quantity.rb +4 -6
  30. data/lib/unitsml/model/unit.rb +4 -9
  31. data/lib/unitsml/model/units/enumerated_root_unit.rb +1 -0
  32. data/lib/unitsml/model/units/name.rb +4 -3
  33. data/lib/unitsml/model/units/root_units.rb +3 -2
  34. data/lib/unitsml/model/units/symbol.rb +5 -2
  35. data/lib/unitsml/model/units/system.rb +4 -3
  36. data/lib/unitsml/model/units.rb +13 -0
  37. data/lib/unitsml/model.rb +15 -0
  38. data/lib/unitsml/namespace.rb +8 -0
  39. data/lib/unitsml/number.rb +79 -0
  40. data/lib/unitsml/parse.rb +31 -19
  41. data/lib/unitsml/parser.rb +5 -6
  42. data/lib/unitsml/prefix.rb +11 -9
  43. data/lib/unitsml/sqrt.rb +3 -3
  44. data/lib/unitsml/transform.rb +117 -55
  45. data/lib/unitsml/unit.rb +43 -33
  46. data/lib/unitsml/unitsdb/dimension.rb +5 -3
  47. data/lib/unitsml/unitsdb/dimensions.rb +6 -4
  48. data/lib/unitsml/unitsdb/prefixes.rb +0 -2
  49. data/lib/unitsml/unitsdb/quantities.rb +0 -2
  50. data/lib/unitsml/unitsdb/units.rb +6 -4
  51. data/lib/unitsml/unitsdb.rb +17 -23
  52. data/lib/unitsml/utility.rb +91 -42
  53. data/lib/unitsml/version.rb +3 -1
  54. data/lib/unitsml.rb +56 -38
  55. data/unitsml.gemspec +24 -19
  56. metadata +29 -35
  57. data/lib/unitsml/error.rb +0 -8
  58. data/unitsdb/LICENSE.md +0 -53
  59. data/unitsdb/README.adoc +0 -1071
  60. data/unitsdb/RELEASE-NOTES.adoc +0 -269
  61. data/unitsdb/dimensions.yaml +0 -1512
  62. data/unitsdb/prefixes.yaml +0 -774
  63. data/unitsdb/quantities.yaml +0 -3113
  64. data/unitsdb/scales.yaml +0 -97
  65. data/unitsdb/schemas/README.md +0 -159
  66. data/unitsdb/schemas/dimensions-schema.yaml +0 -157
  67. data/unitsdb/schemas/prefixes-schema.yaml +0 -159
  68. data/unitsdb/schemas/quantities-schema.yaml +0 -120
  69. data/unitsdb/schemas/scales-schema.yaml +0 -109
  70. data/unitsdb/schemas/unit_systems-schema.yaml +0 -120
  71. data/unitsdb/schemas/units-schema.yaml +0 -219
  72. data/unitsdb/spec/units_spec.rb +0 -20
  73. data/unitsdb/unit_systems.yaml +0 -74
  74. data/unitsdb/units.yaml +0 -13101
  75. data/unitsdb/validate_schemas.rb +0 -208
@@ -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
- Dim2D = {
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? { |u| u.nil? || u[:unit].unit_name == "unknown" || u[:prefix] == "unknown" }
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.each_with_object({}) { |h, m| m[h[:dimension]] = h }
75
- dims_vector = DIMS_VECTOR.map { |h| dim_hash.dig(h, :exponent) }.join(":")
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) || Dim2D.dig(d[:id], :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("unknown") }
100
+ { unit: Unit.new(UNKNOWN) }
93
101
  else
94
102
  u.si_derived_bases.each_with_object([]) do |k, object|
95
- prefix = if !k.prefix_reference.nil?
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
- unit: Unit.new(unit_name, exponent, prefix: prefix),
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[:unit]&.power_numerator&.to_f || 1) + (m[-1][:unit]&.power_numerator&.to_f || 1)
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]), prefix_object(k[: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 "unknown" if p1.base != p2.base
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
- "unknown"
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("&lt;", "<")
155
174
  .gsub("&gt;", ">")
156
175
  .gsub("&amp;", "&")
@@ -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", type: (base ? 'SI_base' : 'SI_derived'))
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.to_f.round(1).to_s.sub(/\.0$/, "")
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.map { |unit| unit.prefix }.compact.uniq { |d| d.prefix_name }
251
+ uniq_prefixes = units.filter_map(&:prefix).uniq(&:prefix_name)
229
252
  uniq_prefixes.map do |prefix|
230
- prefix_attrs = { prefix_base: prefix&.base, prefix_power: prefix&.power, id: prefix&.id }
231
- type_and_methods = { ASCII: :to_asciimath, unicode: :to_unicode, LaTeX: :to_latex, HTML: :to_html }
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.gsub("&amp;", "&")
264
+ Model::Prefix.new(prefix_attrs).to_xml.force_encoding("UTF-8").gsub(
265
+ "&amp;", "&"
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
- "U_#{unit ? unit.nist_id&.gsub(/'/, '_') : text&.gsub(/\*/, '.')&.gsub(/\^/, '')}"
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, quantity)
304
+ def quantity(normtext, instance)
272
305
  unit = unit_instance(normtext)
273
- return unless unit && unit.quantity_references.size == 1 ||
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
- id = (quantity || unit.quantity_references&.first&.id)
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: "##{unit.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('UTF-8'),
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
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Unitsml
2
- VERSION = "0.5.1"
4
+ VERSION = "0.6.1"
3
5
  end
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
- extend self
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
- ::Unitsdb::Unit => Unitsml::Unitsdb::Unit,
48
- ::Unitsdb::Units => Unitsml::Unitsdb::Units,
49
- ::Unitsdb::Prefixes => Unitsml::Unitsdb::Prefixes,
50
- ::Unitsdb::Dimension => Unitsml::Unitsdb::Dimension,
51
- ::Unitsdb::PrefixReference => Unitsml::Unitsdb::PrefixReference,
52
- ::Unitsdb::DimensionDetails => Unitsml::Unitsdb::DimensionQuantity,
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.register
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
- Lutaml::Model::Config.xml_adapter_type = RUBY_ENGINE == "opal" ? :oga : :ox
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
- require_relative 'lib/unitsml/version'
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "lib/unitsml/version"
2
4
 
3
5
  Gem::Specification.new do |spec|
4
- spec.name = 'unitsml'
6
+ spec.name = "unitsml"
5
7
  spec.version = Unitsml::VERSION
6
- spec.authors = ['Ribose Inc.']
7
- spec.email = ['open.source@ribose.com']
8
+ spec.authors = ["Ribose Inc."]
9
+ spec.email = ["open.source@ribose.com"]
8
10
 
9
- spec.summary = 'UnitsML in Ruby'
10
- spec.description = 'Library to work with UnitsML in Ruby'
11
+ spec.summary = "UnitsML in Ruby"
12
+ spec.description = "Library to work with UnitsML in Ruby"
11
13
 
12
- spec.homepage = 'https://github.com/unitsml/unitsml-ruby'
13
- spec.license = 'BSD-2-Clause'
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('>= 2.3.0')
17
+ spec.required_ruby_version = Gem::Requirement.new(">= 2.3.0")
16
18
 
17
- spec.metadata['homepage_uri'] = spec.homepage
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 { |f| f.match(%r{^(test|spec|features)/}) }
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('unitsdb/**/*')
29
+ spec.files += Dir.glob("unitsdb/**/*")
25
30
 
26
- spec.bindir = 'exe'
31
+ spec.bindir = "exe"
27
32
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
28
- spec.require_paths = ['lib', 'unitsdb/**/*.yaml']
33
+ spec.require_paths = ["lib", "unitsdb/**/*.yaml"]
29
34
 
30
- spec.add_dependency 'htmlentities'
31
- spec.add_dependency 'mml'
32
- spec.add_dependency 'parslet'
33
- spec.add_dependency 'unitsdb', '~> 2.0'
34
- spec.add_dependency 'lutaml-model', '~> 0.7.6'
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.5.1
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: 2025-07-31 00:00:00.000000000 Z
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: mml
28
+ name: lutaml-model
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - ">="
31
+ - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: '0'
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: '0'
40
+ version: 0.8.0
41
41
  - !ruby/object:Gem::Dependency
42
- name: parslet
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: unitsdb
56
+ name: parslet
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
- - - "~>"
59
+ - - ">="
60
60
  - !ruby/object:Gem::Version
61
- version: '2.0'
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: '2.0'
68
+ version: '0'
69
69
  - !ruby/object:Gem::Dependency
70
- name: lutaml-model
70
+ name: unitsdb
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
73
  - - "~>"
74
74
  - !ruby/object:Gem::Version
75
- version: 0.7.6
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: 0.7.6
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/error.rb
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:
data/lib/unitsml/error.rb DELETED
@@ -1,8 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Unitsml
4
- class Error < StandardError
5
- end
6
- end
7
-
8
- require_relative "errors/plurimath_load_error"