lutaml-model 0.3.20 → 0.3.22

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: bab2e14b0b68874c47f728f68e7269e1347ab0997d005f93f16b16e897ba386d
4
- data.tar.gz: 31238907ad9f6f969e0a557c85207136b9f49b335494d5d2a2dc6552261b0bab
3
+ metadata.gz: 3d740eaaa52ff7479fc3e0f23aa3fb308bd8b61f820ac22f036b31f24d696989
4
+ data.tar.gz: '0294c66616f39e84e931b626f776ee555450ac962018bf3189200467761e2707'
5
5
  SHA512:
6
- metadata.gz: dc788a5dca9293c258488278ac0617fd3658e16f520c75df304e70b5591832a1ae84ae5ee43d091539904e7a66aef0a03801ac21b997f7b2b2f5bdb99d31e7dd
7
- data.tar.gz: 31026554dadcf54876140fee95c5a2bc4b847cee45e09022b6c5a018a2ea9ff2fa1f067a515acf7cacb880e470935d3e28b34a773d19aae9723a5542c6a55a8a
6
+ metadata.gz: 56675b27dfbf1fa77986f5793f48dd8f5b53b69d5fa989209f79c1f2827ee0ed46eeeeecaed72904be2053a12c4653dab5d06dd0b1401754a06e9a0a9db8fc0f
7
+ data.tar.gz: cedbee96c00a6d43065df43acc8ee7d5262bd03265fda81fc85698c1abb7c00f0989c7cc9d1afe1f5038b4323e886adadd0609250dd9f952e2e1b33fcc9b7fee
data/.rubocop_todo.yml CHANGED
@@ -1,12 +1,12 @@
1
1
  # This configuration was generated by
2
2
  # `rubocop --auto-gen-config`
3
- # on 2024-10-30 07:34:33 UTC using RuboCop version 1.66.1.
3
+ # on 2024-11-03 22:29:56 UTC using RuboCop version 1.66.1.
4
4
  # The point is for the user to remove these configuration records
5
5
  # one by one as the offenses are removed from the code base.
6
6
  # Note that changes in the inspected code, or installation of new
7
7
  # versions of RuboCop, may require this file to be generated again.
8
8
 
9
- # Offense count: 146
9
+ # Offense count: 124
10
10
  # This cop supports safe autocorrection (--autocorrect).
11
11
  # Configuration parameters: Max, AllowHeredoc, AllowURI, URISchemes, IgnoreCopDirectives, AllowedPatterns.
12
12
  # URISchemes: http, https
@@ -46,7 +46,7 @@ Metrics/AbcSize:
46
46
  - 'lib/lutaml/model/xml_adapter/xml_document.rb'
47
47
  - 'lib/lutaml/model/xml_mapping_rule.rb'
48
48
 
49
- # Offense count: 5
49
+ # Offense count: 6
50
50
  # Configuration parameters: CountComments, CountAsOne, AllowedMethods, AllowedPatterns, inherit_mode.
51
51
  # AllowedMethods: refine
52
52
  Metrics/BlockLength:
@@ -67,7 +67,7 @@ Metrics/CyclomaticComplexity:
67
67
  # Offense count: 51
68
68
  # Configuration parameters: CountComments, CountAsOne, AllowedMethods, AllowedPatterns.
69
69
  Metrics/MethodLength:
70
- Max: 43
70
+ Max: 46
71
71
 
72
72
  # Offense count: 7
73
73
  # Configuration parameters: CountKeywordArgs, MaxOptionalParameters.
@@ -95,7 +95,7 @@ RSpec/ContextWording:
95
95
  - 'spec/lutaml/model/xml_adapter/xml_namespace_spec.rb'
96
96
  - 'spec/lutaml/model/xml_mapping_spec.rb'
97
97
 
98
- # Offense count: 109
98
+ # Offense count: 110
99
99
  # Configuration parameters: CountAsOne.
100
100
  RSpec/ExampleLength:
101
101
  Max: 54
data/README.adoc CHANGED
@@ -157,22 +157,27 @@ Syntax:
157
157
  attribute :name_of_attribute, {symbol | string | class}
158
158
  ----
159
159
 
160
+ .Mapping between Lutaml::Model::Type classes, Ruby equivalents and serialization format types
160
161
  |===
161
- | String | Symbol | Class name | Actual value class
162
-
163
- | `String` | `:string` | `Lutaml::Model::Type::String` | `::String`
164
- | `Integer` | `:integer` | `Lutaml::Model::Type::Integer` | `::Integer`
165
- | `Float` | `:float` | `Lutaml::Model::Type::Float` | `::Float`
166
- | `Date` | `:date` | `Lutaml::Model::Type::Date` | `::Date`
167
- | `Time` | `:time` | `Lutaml::Model::Type::Time` | `::Time`
168
- | `DateTime` | `:date_time` | `Lutaml::Model::Type::DateTime` | `::DateTime`
169
- | `TimeWithoutDate` | `:time_without_date` | `Lutaml::Model::Type::TimeWithoutDate` | `::Time`
170
- | `Boolean` | `:boolean` | `Lutaml::Model::Type::Boolean` | `Boolean`
171
- | `Decimal` (optional) | `:decimal` | `Lutaml::Model::Type::Decimal` | `::BigDecimal`
172
- | `Hash` | `:hash` | `Lutaml::Model::Type::Hash` | `::Hash`
162
+ | Lutaml::Model::Type | Ruby Class | XML | JSON | YAML | Example Value
163
+
164
+ | `:string` | `String` | `xs:string` | `string` | `string` | `"text"`
165
+ | `:integer` | `Integer` | `xs:integer` | `number` | `integer` | `42`
166
+ | `:float` | `Float` | `xs:decimal` | `number` | `float` | `3.14`
167
+ | `:boolean` | `TrueClass`/`FalseClass` | `xs:boolean` | `boolean` | `boolean` | `true/false`
168
+ | `:date` | `Date` | `xs:date` | `string` (ISO8601) | `date` | `"2024-01-01"`
169
+ | `:time_without_date` | `Time` | `xs:time` | `string` (ISO8601) | `time` | `"12:34:56"`
170
+ | `:date_time` | `DateTime` | `xs:dateTime` | `string` (ISO8601) | `timestamp` | `"2024-01-01T00:00:00Z"`
171
+ | `:time` | `Time` | `xs:dateTime` | `string` (ISO8601) | `timestamp` | `"2024-01-01T00:00:00Z"`
172
+ | `:decimal` (optional) | `BigDecimal` | `xs:decimal` | `number` | `float` | `123.45`
173
+ | `:hash` | `Hash` | complex element | `object` | `map` | `{key: "value"}`
174
+ | `class` | Custom Class | complex element | `object` | `map` | `CustomObject`
175
+ | `collection: true` | `Array` of Type | repeated elements | `array` | `sequence` | `[obj1, obj2]`
176
+ // | `any`
173
177
 
174
178
  |===
175
179
 
180
+
176
181
  .Defining attributes with supported types via symbol, string and class
177
182
  [example]
178
183
  ====
@@ -538,8 +543,7 @@ For the following xml
538
543
  @description="\n A <b>fictional person</b> commonly used as a <i>placeholder name</i>.\n ",
539
544
  @element_order=["text", "name", "text", "description", "text"],
540
545
  @name="John Doe",
541
- @ordered=nil,
542
- @validate_on_set=false>
546
+ @ordered=nil>
543
547
  ----
544
548
  ====
545
549
 
@@ -1774,8 +1778,7 @@ end
1774
1778
  @name="Masterpiece: Vase",
1775
1779
  @ordered=nil,
1776
1780
  @size=12,
1777
- @description="A beautiful ceramic vase",
1778
- @validate_on_set=false>
1781
+ @description="A beautiful ceramic vase">
1779
1782
  > puts CustomCeramic.new(name: "Vase", size: 12, description: "A beautiful vase").to_xml
1780
1783
  # <CustomCeramic Size="15">
1781
1784
  # <Name>XML Masterpiece: Vase</Name>
@@ -217,7 +217,8 @@ module Lutaml
217
217
 
218
218
  def validate_options!(options)
219
219
  if (invalid_opts = options.keys - ALLOWED_OPTIONS).any?
220
- raise StandardError, "Invalid options given for `#{name}` #{invalid_opts}"
220
+ raise StandardError,
221
+ "Invalid options given for `#{name}` #{invalid_opts}"
221
222
  end
222
223
  end
223
224
 
@@ -225,7 +226,8 @@ module Lutaml
225
226
  return true if type.is_a?(Class)
226
227
  return true if [Symbol, String].include?(type.class) && cast_type!(type)
227
228
 
228
- raise ArgumentError, "Invalid type: #{type}, must be a Symbol, String or a Class"
229
+ raise ArgumentError,
230
+ "Invalid type: #{type}, must be a Symbol, String or a Class"
229
231
  end
230
232
  end
231
233
  end
@@ -32,7 +32,8 @@ module Lutaml
32
32
  @mappings ||= {}
33
33
  @attributes ||= {}
34
34
 
35
- subclass.instance_variable_set(:@attributes, Utils.deep_dup(@attributes))
35
+ subclass.instance_variable_set(:@attributes,
36
+ Utils.deep_dup(@attributes))
36
37
  subclass.instance_variable_set(:@mappings, Utils.deep_dup(@mappings))
37
38
  subclass.instance_variable_set(:@model, subclass)
38
39
  end
@@ -51,17 +52,20 @@ module Lutaml
51
52
  Utils.add_boolean_accessor_if_not_defined(klass, :mixed)
52
53
  Utils.add_accessor_if_not_defined(klass, :element_order)
53
54
 
54
- Utils.add_method_if_not_defined(klass, :using_default_for) do |attribute_name|
55
+ Utils.add_method_if_not_defined(klass,
56
+ :using_default_for) do |attribute_name|
55
57
  @using_default ||= {}
56
58
  @using_default[attribute_name] = true
57
59
  end
58
60
 
59
- Utils.add_method_if_not_defined(klass, :value_set_for) do |attribute_name|
61
+ Utils.add_method_if_not_defined(klass,
62
+ :value_set_for) do |attribute_name|
60
63
  @using_default ||= {}
61
64
  @using_default[attribute_name] = false
62
65
  end
63
66
 
64
- Utils.add_method_if_not_defined(klass, :using_default?) do |attribute_name|
67
+ Utils.add_method_if_not_defined(klass,
68
+ :using_default?) do |attribute_name|
65
69
  @using_default ||= {}
66
70
  !!@using_default[attribute_name]
67
71
  end
@@ -446,8 +450,7 @@ module Lutaml
446
450
  attr_writer :ordered, :mixed
447
451
 
448
452
  def initialize(attrs = {})
449
- @validate_on_set = attrs.delete(:validate_on_set) || false
450
- @using_default ||= {}
453
+ @using_default = {}
451
454
 
452
455
  return unless self.class.attributes
453
456
 
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Lutaml
4
4
  module Model
5
- VERSION = "0.3.20"
5
+ VERSION = "0.3.22"
6
6
  end
7
7
  end
@@ -64,7 +64,7 @@ module Lutaml
64
64
  end
65
65
 
66
66
  def method_missing(method_name, *args, &block)
67
- if block_given?
67
+ if block
68
68
  xml.public_send(method_name, *args, &block)
69
69
  else
70
70
  xml.public_send(method_name, *args)
@@ -128,12 +128,15 @@ module Lutaml
128
128
  )
129
129
  end
130
130
 
131
- default_namespace = node.namespace&.href if root_node.nil?
131
+ if root_node.nil? && !node.namespace&.prefix
132
+ default_namespace = node.namespace&.href
133
+ end
132
134
 
133
135
  super(
134
136
  node,
135
137
  attributes,
136
- parse_all_children(node, root_node: root_node || self, default_namespace: default_namespace),
138
+ parse_all_children(node, root_node: root_node || self,
139
+ default_namespace: default_namespace),
137
140
  node.text,
138
141
  parent_document: root_node,
139
142
  namespace_prefix: node.namespace&.prefix,
@@ -182,7 +185,8 @@ module Lutaml
182
185
 
183
186
  def parse_all_children(node, root_node: nil, default_namespace: nil)
184
187
  node.children.map do |child|
185
- NokogiriElement.new(child, root_node: root_node, default_namespace: default_namespace)
188
+ NokogiriElement.new(child, root_node: root_node,
189
+ default_namespace: default_namespace)
186
190
  end
187
191
  end
188
192
 
@@ -89,6 +89,8 @@ module Lutaml
89
89
  def initialize(node, root_node: nil)
90
90
  if node.is_a?(String)
91
91
  super("text", {}, [], node, parent_document: root_node)
92
+ elsif node.is_a?(Ox::Comment)
93
+ super("comment", {}, [], node.value, parent_document: root_node)
92
94
  else
93
95
  namespace_attributes(node.attributes).each do |(name, value)|
94
96
  if root_node
@@ -77,7 +77,10 @@ module Lutaml
77
77
  result.item_order = element.order
78
78
 
79
79
  element.children.each_with_object(result) do |child, hash|
80
- attr = klass.attribute_for_child(child.name, format) if klass&.<= Serialize
80
+ if klass&.<= Serialize
81
+ attr = klass.attribute_for_child(child.name,
82
+ format)
83
+ end
81
84
 
82
85
  value = if child.text?
83
86
  child.text
@@ -136,7 +139,8 @@ module Lutaml
136
139
  rule = options[:rule]
137
140
 
138
141
  if rule.custom_methods[:to]
139
- options[:mapper_class].new.send(rule.custom_methods[:to], element, xml.parent, xml)
142
+ options[:mapper_class].new.send(rule.custom_methods[:to], element,
143
+ xml.parent, xml)
140
144
  return
141
145
  end
142
146
 
@@ -203,7 +207,8 @@ module Lutaml
203
207
  end
204
208
 
205
209
  xml_mapping.attributes.each do |attribute_rule|
206
- attribute_rule.serialize_attribute(element, prefixed_xml.parent, xml)
210
+ attribute_rule.serialize_attribute(element, prefixed_xml.parent,
211
+ xml)
207
212
  end
208
213
 
209
214
  xml_mapping.elements.each do |element_rule|
@@ -223,11 +228,13 @@ module Lutaml
223
228
  element,
224
229
  element_rule.prefix,
225
230
  value,
226
- options.merge({ attribute: attribute_def, rule: element_rule, mapper_class: mapper_class }),
231
+ options.merge({ attribute: attribute_def, rule: element_rule,
232
+ mapper_class: mapper_class }),
227
233
  )
228
234
  end
229
235
 
230
- process_content_mapping(element, xml_mapping.content_mapping, prefixed_xml)
236
+ process_content_mapping(element, xml_mapping.content_mapping,
237
+ prefixed_xml)
231
238
 
232
239
  process_raw_mapping(element, xml_mapping.raw_mapping, prefixed_xml)
233
240
  end
@@ -318,7 +325,8 @@ module Lutaml
318
325
  next unless type
319
326
 
320
327
  if type <= Lutaml::Model::Serialize
321
- attrs = attrs.merge(build_namespace_attributes(type, processed, { caller_rule: mapping_rule }))
328
+ attrs = attrs.merge(build_namespace_attributes(type, processed,
329
+ { caller_rule: mapping_rule }))
322
330
  end
323
331
 
324
332
  if mapping_rule.namespace && mapping_rule.prefix && mapping_rule.name != "lang"
@@ -348,8 +356,10 @@ module Lutaml
348
356
  hash["xmlns:#{mapping_rule.prefix}"] = mapping_rule.namespace
349
357
  end
350
358
 
351
- if render_element?(mapping_rule, element, mapping_rule.to_value_for(element))
352
- hash[mapping_rule.prefixed_name] = mapping_rule.to_value_for(element)
359
+ if render_element?(mapping_rule, element,
360
+ mapping_rule.to_value_for(element))
361
+ hash[mapping_rule.prefixed_name] =
362
+ mapping_rule.to_value_for(element)
353
363
  end
354
364
  end
355
365
 
@@ -222,12 +222,15 @@ module Lutaml
222
222
 
223
223
  def deep_dup
224
224
  self.class.new.tap do |xml_mapping|
225
- xml_mapping.root(@root_element.dup, mixed: @mixed_content, ordered: @ordered)
225
+ xml_mapping.root(@root_element.dup, mixed: @mixed_content,
226
+ ordered: @ordered)
226
227
  xml_mapping.namespace(@namespace_uri.dup, @namespace_prefix.dup)
227
228
 
228
- xml_mapping.instance_variable_set(:@attributes, dup_mappings(@attributes))
229
+ xml_mapping.instance_variable_set(:@attributes,
230
+ dup_mappings(@attributes))
229
231
  xml_mapping.instance_variable_set(:@elements, dup_mappings(@elements))
230
- xml_mapping.instance_variable_set(:@content_mapping, @content_mapping&.deep_dup)
232
+ xml_mapping.instance_variable_set(:@content_mapping,
233
+ @content_mapping&.deep_dup)
231
234
  end
232
235
  end
233
236
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: lutaml-model
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.20
4
+ version: 0.3.22
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ribose Inc.
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2024-11-01 00:00:00.000000000 Z
11
+ date: 2024-11-05 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: thor