lutaml-model 0.8.8 → 0.8.10

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 (91) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop_todo.yml +12 -32
  3. data/lib/lutaml/key_value/transform.rb +5 -5
  4. data/lib/lutaml/key_value/transformation/collection_serializer.rb +25 -11
  5. data/lib/lutaml/key_value/transformation/value_serializer.rb +7 -7
  6. data/lib/lutaml/key_value/transformation.rb +27 -17
  7. data/lib/lutaml/model/adapter_resolver.rb +4 -6
  8. data/lib/lutaml/model/attribute.rb +26 -23
  9. data/lib/lutaml/model/cached_type_resolver.rb +10 -9
  10. data/lib/lutaml/model/cli.rb +1 -1
  11. data/lib/lutaml/model/collection.rb +4 -4
  12. data/lib/lutaml/model/comparable_model.rb +11 -11
  13. data/lib/lutaml/model/config.rb +1 -1
  14. data/lib/lutaml/model/consolidation/dispatcher.rb +1 -1
  15. data/lib/lutaml/model/consolidation/pattern_chunker.rb +3 -3
  16. data/lib/lutaml/model/format_registry.rb +6 -4
  17. data/lib/lutaml/model/global_context.rb +2 -2
  18. data/lib/lutaml/model/global_register.rb +1 -1
  19. data/lib/lutaml/model/instrumentation.rb +1 -1
  20. data/lib/lutaml/model/mapping/mapping_rule.rb +3 -3
  21. data/lib/lutaml/model/mapping/model_mapping.rb +1 -1
  22. data/lib/lutaml/model/mapping/model_mapping_rule.rb +1 -1
  23. data/lib/lutaml/model/register.rb +3 -3
  24. data/lib/lutaml/model/render_policy.rb +11 -17
  25. data/lib/lutaml/model/runtime_compatibility.rb +0 -1
  26. data/lib/lutaml/model/schema/xml_compiler/group.rb +1 -1
  27. data/lib/lutaml/model/schema/xml_compiler/registry_generator.rb +1 -1
  28. data/lib/lutaml/model/schema/xml_compiler/sequence.rb +0 -2
  29. data/lib/lutaml/model/schema/xml_compiler.rb +14 -14
  30. data/lib/lutaml/model/serialize/attribute_definition.rb +1 -1
  31. data/lib/lutaml/model/serialize/deserialization_context.rb +50 -0
  32. data/lib/lutaml/model/serialize/format_conversion.rb +2 -2
  33. data/lib/lutaml/model/serialize/initialization.rb +44 -7
  34. data/lib/lutaml/model/serialize/model_import.rb +1 -1
  35. data/lib/lutaml/model/serialize.rb +8 -1
  36. data/lib/lutaml/model/services/rule_value_extractor.rb +2 -1
  37. data/lib/lutaml/model/store.rb +27 -21
  38. data/lib/lutaml/model/transformation_registry.rb +1 -1
  39. data/lib/lutaml/model/type_context.rb +7 -1
  40. data/lib/lutaml/model/type_resolver.rb +1 -6
  41. data/lib/lutaml/model/utils.rb +19 -6
  42. data/lib/lutaml/model/validation_framework.rb +1 -1
  43. data/lib/lutaml/model/value_transformer.rb +2 -2
  44. data/lib/lutaml/model/version.rb +1 -1
  45. data/lib/lutaml/xml/adapter/adapter_helpers.rb +1 -1
  46. data/lib/lutaml/xml/adapter/base_adapter.rb +10 -14
  47. data/lib/lutaml/xml/adapter/namespace_uri_collector.rb +3 -3
  48. data/lib/lutaml/xml/adapter/plan_based_builder.rb +14 -14
  49. data/lib/lutaml/xml/adapter/xml_serializer.rb +3 -3
  50. data/lib/lutaml/xml/configurable.rb +2 -1
  51. data/lib/lutaml/xml/data_model.rb +2 -2
  52. data/lib/lutaml/xml/decisions/decision_context.rb +3 -3
  53. data/lib/lutaml/xml/decisions/rules/element_form_default_unqualified_rule.rb +1 -1
  54. data/lib/lutaml/xml/decisions/rules/element_form_option_rule.rb +1 -1
  55. data/lib/lutaml/xml/decisions/rules/used_prefix_rule.rb +1 -1
  56. data/lib/lutaml/xml/declaration_plan.rb +2 -2
  57. data/lib/lutaml/xml/declaration_planner.rb +12 -13
  58. data/lib/lutaml/xml/document.rb +13 -13
  59. data/lib/lutaml/xml/format_chooser.rb +3 -3
  60. data/lib/lutaml/xml/hoisting_algorithm.rb +1 -1
  61. data/lib/lutaml/xml/mapping.rb +2 -2
  62. data/lib/lutaml/xml/mapping_rule.rb +16 -3
  63. data/lib/lutaml/xml/model_transform.rb +17 -19
  64. data/lib/lutaml/xml/namespace_collector.rb +10 -10
  65. data/lib/lutaml/xml/namespace_declaration.rb +2 -2
  66. data/lib/lutaml/xml/namespace_declaration_data.rb +5 -8
  67. data/lib/lutaml/xml/namespace_scope_config.rb +3 -2
  68. data/lib/lutaml/xml/namespace_type_resolver.rb +4 -4
  69. data/lib/lutaml/xml/nokogiri/element.rb +2 -2
  70. data/lib/lutaml/xml/polymorphic_value_handler.rb +1 -1
  71. data/lib/lutaml/xml/schema/xsd/base.rb +7 -7
  72. data/lib/lutaml/xml/schema/xsd/choice.rb +2 -2
  73. data/lib/lutaml/xml/schema/xsd/complex_type.rb +5 -5
  74. data/lib/lutaml/xml/schema/xsd/errors/message_builder.rb +3 -3
  75. data/lib/lutaml/xml/schema/xsd/group.rb +2 -2
  76. data/lib/lutaml/xml/schema/xsd/schema_validator.rb +3 -0
  77. data/lib/lutaml/xml/schema/xsd/sequence.rb +2 -2
  78. data/lib/lutaml/xml/schema/xsd_schema.rb +5 -5
  79. data/lib/lutaml/xml/serialization/format_conversion.rb +4 -3
  80. data/lib/lutaml/xml/transformation/element_builder.rb +4 -2
  81. data/lib/lutaml/xml/transformation/rule_applier.rb +2 -2
  82. data/lib/lutaml/xml/transformation/value_serializer.rb +4 -6
  83. data/lib/lutaml/xml/transformation.rb +4 -4
  84. data/lib/lutaml/xml/type/configurable.rb +0 -4
  85. data/lib/lutaml/xml/xml_element.rb +21 -13
  86. data/lutaml-model.gemspec +1 -1
  87. data/spec/lutaml/model/cached_type_resolver_spec.rb +3 -3
  88. data/spec/lutaml/model/optimization_spec.rb +228 -0
  89. data/spec/lutaml/model/store_spec.rb +41 -0
  90. data/spec/lutaml/xml/data_model_spec.rb +10 -28
  91. metadata +6 -4
@@ -69,6 +69,47 @@ RSpec.describe Lutaml::Model::Store do
69
69
  end
70
70
  end
71
71
 
72
+ describe "multi-class index isolation" do
73
+ let(:other_class) do
74
+ Class.new(Lutaml::Model::Serializable) do
75
+ attribute :id, :string
76
+ attribute :code, :string
77
+ end
78
+ end
79
+
80
+ it "does not mix indices across different classes" do
81
+ model_class.new(id: "a")
82
+ other_class.new(id: "a")
83
+
84
+ result = described_class.resolve(model_class, :id, "a")
85
+ expect(result).to be_a(model_class)
86
+
87
+ result2 = described_class.resolve(other_class, :id, "a")
88
+ expect(result2).to be_a(other_class)
89
+ end
90
+
91
+ it "registering class B does not iterate class A's indices" do
92
+ # Build index for model_class
93
+ model_class.new(id: "x")
94
+ described_class.resolve(model_class, :id, "x")
95
+
96
+ # Registering other_class should not trigger work on model_class indices
97
+ 100.times { |i| other_class.new(id: "other-#{i}", code: "c#{i}") }
98
+ result = described_class.resolve(model_class, :id, "x")
99
+ expect(result.id).to eq("x")
100
+ end
101
+
102
+ it "resolves by different reference keys independently per class" do
103
+ other_class.new(id: "alpha", code: "Z1")
104
+
105
+ result = described_class.resolve(other_class, :id, "alpha")
106
+ expect(result.id).to eq("alpha")
107
+
108
+ result2 = described_class.resolve(other_class, :code, "Z1")
109
+ expect(result2.code).to eq("Z1")
110
+ end
111
+ end
112
+
72
113
  describe "WeakRef behavior" do
73
114
  it "uses WeakRef for storage (objects can be collected when unreferenced)" do
74
115
  obj = model_class.new(id: "alive")
@@ -6,15 +6,10 @@ RSpec.describe Lutaml::Xml::DataModel do
6
6
  describe Lutaml::Xml::DataModel::XmlElement do
7
7
  let(:element_name) { "test-element" }
8
8
  let(:namespace_class) do
9
- Class.new do
10
- def self.prefix_default
11
- "test"
12
- end
13
-
14
- def self.uri
15
- "http://example.com/test"
16
- end
17
- end
9
+ ns = Class.new(Lutaml::Xml::Namespace)
10
+ ns.prefix_default "test"
11
+ ns.uri "http://example.com/test"
12
+ ns
18
13
  end
19
14
 
20
15
  describe "#initialize" do
@@ -146,11 +141,7 @@ RSpec.describe Lutaml::Xml::DataModel do
146
141
  end
147
142
 
148
143
  it "returns unprefixed when namespace has no prefix" do
149
- ns_no_prefix = Class.new do
150
- def self.prefix_default
151
- nil
152
- end
153
- end
144
+ ns_no_prefix = Class.new(Lutaml::Xml::Namespace)
154
145
  element = described_class.new("element", ns_no_prefix)
155
146
 
156
147
  expect(element.qualified_name).to eq("element")
@@ -208,15 +199,10 @@ RSpec.describe Lutaml::Xml::DataModel do
208
199
  let(:attr_name) { "test-attr" }
209
200
  let(:attr_value) { "test-value" }
210
201
  let(:namespace_class) do
211
- Class.new do
212
- def self.prefix_default
213
- "test"
214
- end
215
-
216
- def self.uri
217
- "http://example.com/test"
218
- end
219
- end
202
+ ns = Class.new(Lutaml::Xml::Namespace)
203
+ ns.prefix_default "test"
204
+ ns.uri "http://example.com/test"
205
+ ns
220
206
  end
221
207
 
222
208
  describe "#initialize" do
@@ -257,11 +243,7 @@ RSpec.describe Lutaml::Xml::DataModel do
257
243
  end
258
244
 
259
245
  it "returns unprefixed when namespace has no prefix" do
260
- ns_no_prefix = Class.new do
261
- def self.prefix_default
262
- nil
263
- end
264
- end
246
+ ns_no_prefix = Class.new(Lutaml::Xml::Namespace)
265
247
  attribute = described_class.new(attr_name, attr_value, ns_no_prefix)
266
248
 
267
249
  expect(attribute.qualified_name).to eq(attr_name)
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.8.8
4
+ version: 0.8.10
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ribose Inc.
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2026-05-14 00:00:00.000000000 Z
11
+ date: 2026-05-18 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: base64
@@ -92,14 +92,14 @@ dependencies:
92
92
  requirements:
93
93
  - - ">="
94
94
  - !ruby/object:Gem::Version
95
- version: 0.1.16
95
+ version: 0.1.20
96
96
  type: :runtime
97
97
  prerelease: false
98
98
  version_requirements: !ruby/object:Gem::Requirement
99
99
  requirements:
100
100
  - - ">="
101
101
  - !ruby/object:Gem::Version
102
- version: 0.1.16
102
+ version: 0.1.20
103
103
  - !ruby/object:Gem::Dependency
104
104
  name: ostruct
105
105
  requirement: !ruby/object:Gem::Requirement
@@ -532,6 +532,7 @@ files:
532
532
  - lib/lutaml/model/serialize.rb
533
533
  - lib/lutaml/model/serialize/attribute_definition.rb
534
534
  - lib/lutaml/model/serialize/builder.rb
535
+ - lib/lutaml/model/serialize/deserialization_context.rb
535
536
  - lib/lutaml/model/serialize/enum_handling.rb
536
537
  - lib/lutaml/model/serialize/format_conversion.rb
537
538
  - lib/lutaml/model/serialize/initialization.rb
@@ -1614,6 +1615,7 @@ files:
1614
1615
  - spec/lutaml/model/multiple_mapping_spec.rb
1615
1616
  - spec/lutaml/model/namespace_versioning_spec.rb
1616
1617
  - spec/lutaml/model/one_entry_cache_spec.rb
1618
+ - spec/lutaml/model/optimization_spec.rb
1617
1619
  - spec/lutaml/model/ordered_content_spec.rb
1618
1620
  - spec/lutaml/model/polymorphic_spec.rb
1619
1621
  - spec/lutaml/model/processing_instruction_spec.rb