lutaml-model 0.8.129 → 0.8.131

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 (40) hide show
  1. checksums.yaml +4 -4
  2. data/docs/key_value_data_model.adoc +9 -9
  3. data/lib/lutaml/json/adapter/multi_json_adapter.rb +1 -7
  4. data/lib/lutaml/json/adapter/oj_adapter.rb +1 -7
  5. data/lib/lutaml/json/adapter/standard_adapter.rb +1 -7
  6. data/lib/lutaml/key_value/adapter/json/multi_json_adapter.rb +1 -7
  7. data/lib/lutaml/key_value/adapter/json/oj_adapter.rb +1 -7
  8. data/lib/lutaml/key_value/adapter/json/standard_adapter.rb +1 -7
  9. data/lib/lutaml/key_value/adapter/toml/teptris_adapter.rb +1 -7
  10. data/lib/lutaml/key_value/adapter/toml/toml_rb_adapter.rb +1 -7
  11. data/lib/lutaml/key_value/adapter/toml/tomlib_adapter.rb +1 -7
  12. data/lib/lutaml/key_value/adapter/yaml/standard_adapter.rb +1 -7
  13. data/lib/lutaml/key_value/data_model/element.rb +31 -32
  14. data/lib/lutaml/key_value/mapping_rule.rb +4 -4
  15. data/lib/lutaml/key_value/transform.rb +6 -5
  16. data/lib/lutaml/key_value/transformation.rb +21 -18
  17. data/lib/lutaml/model/attribute.rb +23 -1
  18. data/lib/lutaml/model/collection.rb +1 -5
  19. data/lib/lutaml/model/mapping/mapping_rule.rb +21 -2
  20. data/lib/lutaml/model/schema/xml_compiler/spec_builder/complex_types.rb +9 -4
  21. data/lib/lutaml/model/schema/xml_compiler/spec_builder/members.rb +15 -8
  22. data/lib/lutaml/model/schema/xml_compiler/spec_builder.rb +2 -2
  23. data/lib/lutaml/model/schema/xml_compiler/supported_data_types.rb +10 -0
  24. data/lib/lutaml/model/serialize/attribute_definition.rb +133 -2
  25. data/lib/lutaml/model/serialize/initialization.rb +12 -0
  26. data/lib/lutaml/model/serialize.rb +30 -10
  27. data/lib/lutaml/model/version.rb +1 -1
  28. data/lib/lutaml/toml/adapter/toml_rb_adapter.rb +1 -7
  29. data/lib/lutaml/toml/adapter/tomlib_adapter.rb +1 -7
  30. data/lib/lutaml/xml/builder/base.rb +3 -1
  31. data/lib/lutaml/xml/transformation/rule_compiler.rb +2 -2
  32. data/lib/lutaml/yaml/adapter/standard_adapter.rb +1 -7
  33. data/lib/lutaml/yaml/adapter/yeptris_adapter.rb +1 -7
  34. data/lib/lutaml/yamlld/adapter.rb +1 -6
  35. data/spec/lutaml/key_value/adapter/toml/teptris_adapter_spec.rb +3 -3
  36. data/spec/lutaml/key_value/group_instantiate_spec.rb +8 -0
  37. data/spec/lutaml/key_value/transformation_spec.rb +50 -50
  38. data/spec/lutaml/model/collection_spec.rb +43 -0
  39. data/spec/lutaml/model/schema/xml_compiler_runtime_spec.rb +81 -0
  40. metadata +2 -2
@@ -49,4 +49,85 @@ RSpec.describe "runtime XSD class loading" do
49
49
  expect(doc.to_xml).to include('id="e1"')
50
50
  end
51
51
  end
52
+
53
+ # Anonymous (inline) complexTypes get CT_-prefixed internal names;
54
+ # the generated classes must still (a) map skippable XSD built-ins
55
+ # like xs:int to Lutaml primitives and (b) serialize the owning
56
+ # element name, not the internal alias (#1014).
57
+ describe "inline anonymous complexTypes" do
58
+ let(:catalogue_xsd) do
59
+ <<~XSD
60
+ <?xml version="1.0" encoding="UTF-8"?>
61
+ <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
62
+ elementFormDefault="qualified">
63
+ <xs:element name="catalogue">
64
+ <xs:complexType>
65
+ <xs:sequence>
66
+ <xs:element name="title" type="xs:string"/>
67
+ <xs:element name="entry" maxOccurs="unbounded">
68
+ <xs:complexType>
69
+ <xs:sequence>
70
+ <xs:element name="name" type="xs:string"/>
71
+ <xs:element name="year" type="xs:int"/>
72
+ </xs:sequence>
73
+ <xs:attribute name="id" type="xs:string" use="required"/>
74
+ </xs:complexType>
75
+ </xs:element>
76
+ </xs:sequence>
77
+ </xs:complexType>
78
+ </xs:element>
79
+ </xs:schema>
80
+ XSD
81
+ end
82
+
83
+ let(:catalogue_xml) do
84
+ <<~XML
85
+ <catalogue>
86
+ <title>Test</title>
87
+ <entry id="e1"><name>Alpha</name><year>2024</year></entry>
88
+ <entry id="e2"><name>Beta</name><year>2025</year></entry>
89
+ </catalogue>
90
+ XML
91
+ end
92
+
93
+ it "maps xs:int to :integer and parses the instance" do
94
+ Dir.mktmpdir do |dir|
95
+ Lutaml::Model::Schema.from_xml(
96
+ catalogue_xsd, output_dir: File.join(dir, "anon_ct_models"),
97
+ load_classes: true
98
+ )
99
+
100
+ entry_class = AnonCtModels::CTEntry
101
+ expect(entry_class.attributes[:year].type).to eq(
102
+ Lutaml::Model::Type::Integer,
103
+ )
104
+
105
+ doc = AnonCtModels::CTCatalogue.from_xml(catalogue_xml)
106
+
107
+ expect(doc.title).to eq("Test")
108
+ expect(doc.entry.map(&:name)).to eq(["Alpha", "Beta"])
109
+ expect(doc.entry.map(&:year)).to eq([2024, 2025])
110
+ expect(doc.entry.map(&:id)).to eq(%w[e1 e2])
111
+ end
112
+ end
113
+
114
+ it "serializes the owning element name, not the CT_ alias" do
115
+ Dir.mktmpdir do |dir|
116
+ Lutaml::Model::Schema.from_xml(
117
+ catalogue_xsd, output_dir: File.join(dir, "anon_ct_models2"),
118
+ load_classes: true
119
+ )
120
+
121
+ entry = AnonCtModels2::CTEntry.from_xml(
122
+ '<entry id="z9"><name>Gamma</name><year>1999</year></entry>',
123
+ )
124
+
125
+ expect(entry.name).to eq("Gamma")
126
+ expect(entry.year).to eq(1999)
127
+ expect(entry.id).to eq("z9")
128
+ expect(entry.to_xml).to include('<entry id="z9">')
129
+ expect(entry.to_xml).not_to include("CT_entry")
130
+ end
131
+ end
132
+ end
52
133
  end
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.129
4
+ version: 0.8.131
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-10-24 00:00:00.000000000 Z
11
+ date: 2026-10-25 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: base64