lutaml-model 0.5.3 → 0.5.4
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-tests.yml +2 -0
- data/.rubocop_todo.yml +39 -13
- data/Gemfile +1 -0
- data/README.adoc +396 -23
- data/lib/lutaml/model/constants.rb +7 -0
- data/lib/lutaml/model/error/type/invalid_value_error.rb +19 -0
- data/lib/lutaml/model/error.rb +1 -0
- data/lib/lutaml/model/key_value_mapping.rb +31 -2
- data/lib/lutaml/model/mapping_hash.rb +8 -0
- data/lib/lutaml/model/mapping_rule.rb +4 -0
- data/lib/lutaml/model/schema/templates/simple_type.rb +247 -0
- data/lib/lutaml/model/schema/xml_compiler.rb +720 -0
- data/lib/lutaml/model/schema.rb +5 -0
- data/lib/lutaml/model/serialize.rb +24 -8
- data/lib/lutaml/model/toml_adapter/toml_rb_adapter.rb +1 -2
- data/lib/lutaml/model/type/hash.rb +11 -11
- data/lib/lutaml/model/version.rb +1 -1
- data/lib/lutaml/model/xml_adapter/nokogiri_adapter.rb +5 -1
- data/lib/lutaml/model/xml_adapter/xml_document.rb +11 -15
- data/lib/lutaml/model/xml_mapping.rb +4 -2
- data/lib/lutaml/model/xml_mapping_rule.rb +1 -4
- data/lib/lutaml/model.rb +1 -0
- data/spec/fixtures/xml/invalid_math_document.xml +4 -0
- data/spec/fixtures/xml/math_document_schema.xsd +56 -0
- data/spec/fixtures/xml/test_schema.xsd +53 -0
- data/spec/fixtures/xml/valid_math_document.xml +4 -0
- data/spec/lutaml/model/cdata_spec.rb +2 -2
- data/spec/lutaml/model/custom_model_spec.rb +7 -20
- data/spec/lutaml/model/key_value_mapping_spec.rb +27 -0
- data/spec/lutaml/model/map_all_spec.rb +188 -0
- data/spec/lutaml/model/mixed_content_spec.rb +15 -15
- data/spec/lutaml/model/schema/xml_compiler_spec.rb +1431 -0
- data/spec/lutaml/model/with_child_mapping_spec.rb +2 -2
- data/spec/lutaml/model/xml_adapter/xml_namespace_spec.rb +52 -0
- data/spec/lutaml/model/xml_mapping_spec.rb +108 -1
- metadata +12 -2
@@ -341,7 +341,7 @@ RSpec.describe ChildMapping do
|
|
341
341
|
actual = Lutaml::Model::Config.toml_adapter.parse(instance.to_toml)
|
342
342
|
expected = Lutaml::Model::Config.toml_adapter.parse(toml)
|
343
343
|
|
344
|
-
expect(actual
|
344
|
+
expect(actual).to eq(expected)
|
345
345
|
end
|
346
346
|
|
347
347
|
it "converts object to toml with nesting values" do
|
@@ -349,7 +349,7 @@ RSpec.describe ChildMapping do
|
|
349
349
|
actual = Lutaml::Model::Config.toml_adapter.parse(instance.to_toml)
|
350
350
|
expected = Lutaml::Model::Config.toml_adapter.parse(prefixes_toml)
|
351
351
|
|
352
|
-
expect(actual
|
352
|
+
expect(actual).to eq(expected)
|
353
353
|
end
|
354
354
|
end
|
355
355
|
end
|
@@ -123,6 +123,20 @@ RSpec.shared_context "XML namespace models" do
|
|
123
123
|
map_element "body", to: :body
|
124
124
|
end
|
125
125
|
end
|
126
|
+
|
127
|
+
class OwnedEnd < Lutaml::Model::Serializable
|
128
|
+
attribute :id, :string
|
129
|
+
attribute :type, :string
|
130
|
+
attribute :uml_type, :string
|
131
|
+
|
132
|
+
xml do
|
133
|
+
root "ownedEnd"
|
134
|
+
|
135
|
+
map_attribute "id", to: :id, namespace: "http://www.omg.org/spec/XMI/20131001", prefix: "xmi"
|
136
|
+
map_attribute "type", to: :type, namespace: "http://www.omg.org/spec/XMI/20131001", prefix: "xmi"
|
137
|
+
map_attribute "type", to: :uml_type
|
138
|
+
end
|
139
|
+
end
|
126
140
|
end
|
127
141
|
|
128
142
|
RSpec.shared_examples "XML serialization with namespace" do |model_class, xml_string|
|
@@ -302,6 +316,44 @@ RSpec.shared_examples "an XML namespace parser" do |adapter_class|
|
|
302
316
|
end
|
303
317
|
end
|
304
318
|
end
|
319
|
+
|
320
|
+
context "when two attributes have same name but different prefix" do
|
321
|
+
let(:xml_input) do
|
322
|
+
<<~XML
|
323
|
+
<ownedEnd xmlns:xmi="http://www.omg.org/spec/XMI/20131001"
|
324
|
+
xmi:type="xmi_type"
|
325
|
+
xmi:id="my_id"
|
326
|
+
type="test" />
|
327
|
+
XML
|
328
|
+
end
|
329
|
+
|
330
|
+
describe "XML serialization" do
|
331
|
+
it "correctly deserializes from XML" do
|
332
|
+
owned_end = OwnedEnd.from_xml(xml_input)
|
333
|
+
|
334
|
+
expect(owned_end.id).to eq("my_id")
|
335
|
+
expect(owned_end.type).to eq("xmi_type")
|
336
|
+
expect(owned_end.uml_type).to eq("test")
|
337
|
+
end
|
338
|
+
|
339
|
+
it "correctly serializes to XML" do
|
340
|
+
owned_end = OwnedEnd.new(
|
341
|
+
id: "my_id",
|
342
|
+
type: "xmi_type",
|
343
|
+
uml_type: "test",
|
344
|
+
)
|
345
|
+
|
346
|
+
expect(owned_end.to_xml).to be_equivalent_to(xml_input)
|
347
|
+
end
|
348
|
+
|
349
|
+
it "round-trips XML" do
|
350
|
+
owned_end = OwnedEnd.from_xml(xml_input)
|
351
|
+
output_xml = owned_end.to_xml
|
352
|
+
|
353
|
+
expect(output_xml).to be_equivalent_to(xml_input)
|
354
|
+
end
|
355
|
+
end
|
356
|
+
end
|
305
357
|
end
|
306
358
|
|
307
359
|
RSpec.describe Lutaml::Model::XmlAdapter::NokogiriAdapter do
|
@@ -131,6 +131,45 @@ module XmlMapping
|
|
131
131
|
end
|
132
132
|
end
|
133
133
|
|
134
|
+
class AnnotatedElement < Lutaml::Model::Serializable
|
135
|
+
attribute :idref, :string
|
136
|
+
|
137
|
+
xml do
|
138
|
+
root "annotatedElement"
|
139
|
+
map_attribute "idref", to: :idref, namespace: "http://www.omg.org/spec/XMI/20131001", prefix: "xmi"
|
140
|
+
end
|
141
|
+
end
|
142
|
+
|
143
|
+
class OwnedComment < Lutaml::Model::Serializable
|
144
|
+
attribute :annotated_attribute, :string
|
145
|
+
attribute :annotated_element, AnnotatedElement
|
146
|
+
|
147
|
+
xml do
|
148
|
+
root "ownedComment"
|
149
|
+
map_attribute "annotatedElement", to: :annotated_attribute
|
150
|
+
map_element "annotatedElement", to: :annotated_element, prefix: nil, namespace: nil
|
151
|
+
end
|
152
|
+
end
|
153
|
+
|
154
|
+
class Date < Lutaml::Model::Serializable
|
155
|
+
attribute :type, :string
|
156
|
+
attribute :text, :string
|
157
|
+
attribute :content, :string
|
158
|
+
attribute :from, :string
|
159
|
+
attribute :to, :string
|
160
|
+
attribute :on, :string
|
161
|
+
|
162
|
+
xml do
|
163
|
+
root "date", mixed: true
|
164
|
+
map_attribute "type", to: :type
|
165
|
+
map_attribute "text", to: :text
|
166
|
+
map_content to: :content
|
167
|
+
map_element "from", to: :from
|
168
|
+
map_element "to", to: :to
|
169
|
+
map_element "on", to: :on
|
170
|
+
end
|
171
|
+
end
|
172
|
+
|
134
173
|
class OverrideDefaultNamespacePrefix < Lutaml::Model::Serializable
|
135
174
|
attribute :same_element_name, SameNameDifferentNamespace
|
136
175
|
|
@@ -187,7 +226,7 @@ module XmlMapping
|
|
187
226
|
xml do
|
188
227
|
root "MapAllWithCustomMethod"
|
189
228
|
|
190
|
-
|
229
|
+
map_all_content to: :all_content, with: { to: :content_to_xml, from: :content_from_xml }
|
191
230
|
end
|
192
231
|
|
193
232
|
def content_to_xml(model, parent, doc)
|
@@ -359,6 +398,69 @@ RSpec.describe Lutaml::Model::XmlMapping do
|
|
359
398
|
end
|
360
399
|
end
|
361
400
|
|
401
|
+
context "with same element and attribute name" do
|
402
|
+
let(:xml_with_element) do
|
403
|
+
<<~XML
|
404
|
+
<ownedComment xmlns:xmi="http://www.omg.org/spec/XMI/20131001">
|
405
|
+
<annotatedElement xmi:idref="ABC"/>
|
406
|
+
</ownedComment>
|
407
|
+
XML
|
408
|
+
end
|
409
|
+
|
410
|
+
let(:xml_with_attribute) do
|
411
|
+
<<~XML
|
412
|
+
<ownedComment annotatedElement="test2">
|
413
|
+
</ownedComment>
|
414
|
+
XML
|
415
|
+
end
|
416
|
+
|
417
|
+
let(:xml_with_same_name_attribute_and_element) do
|
418
|
+
<<~XML
|
419
|
+
<ownedComment xmlns:xmi="http://www.omg.org/spec/XMI/20131001" annotatedElement="test2">
|
420
|
+
<annotatedElement xmi:idref="ABC"/>
|
421
|
+
</ownedComment>
|
422
|
+
XML
|
423
|
+
end
|
424
|
+
|
425
|
+
let(:xml) do
|
426
|
+
<<~XML
|
427
|
+
<date type="published">
|
428
|
+
End of December
|
429
|
+
<on>2020-01</on>
|
430
|
+
Start of January
|
431
|
+
</date>
|
432
|
+
XML
|
433
|
+
end
|
434
|
+
|
435
|
+
it "parse and serializes the input xml correctly # lutaml/issues/217" do
|
436
|
+
parsed = XmlMapping::OwnedComment.from_xml(xml_with_element)
|
437
|
+
serialized = parsed.to_xml
|
438
|
+
|
439
|
+
expect(serialized).to be_equivalent_to(xml_with_element.strip)
|
440
|
+
end
|
441
|
+
|
442
|
+
it "parse and serialize model correctly" do
|
443
|
+
parsed = XmlMapping::OwnedComment.from_xml(xml_with_attribute)
|
444
|
+
serialized = parsed.to_xml
|
445
|
+
|
446
|
+
expect(serialized).to be_equivalent_to(xml_with_attribute)
|
447
|
+
end
|
448
|
+
|
449
|
+
it "parse and serialize model correctly with both attribute and element" do
|
450
|
+
parsed = XmlMapping::OwnedComment.from_xml(xml_with_same_name_attribute_and_element)
|
451
|
+
serialized = parsed.to_xml
|
452
|
+
|
453
|
+
expect(serialized).to be_equivalent_to(xml_with_same_name_attribute_and_element)
|
454
|
+
end
|
455
|
+
|
456
|
+
it "testing parse element" do
|
457
|
+
parsed = XmlMapping::Date.from_xml(xml)
|
458
|
+
serialized = parsed.to_xml
|
459
|
+
|
460
|
+
expect(serialized).to be_equivalent_to(xml)
|
461
|
+
end
|
462
|
+
end
|
463
|
+
|
362
464
|
context "with same name elements" do
|
363
465
|
let(:input_xml) do
|
364
466
|
<<~XML
|
@@ -886,6 +988,11 @@ RSpec.describe Lutaml::Model::XmlMapping do
|
|
886
988
|
# `to` is symbol which are constant so object_id will be same
|
887
989
|
expect(orig_mapping.to).to eq(dup_mapping.to)
|
888
990
|
end
|
991
|
+
|
992
|
+
it "duplicates attribute" do
|
993
|
+
# boolean value is constant so object_id will be same
|
994
|
+
expect(orig_mappings.attributes.first.attribute?).to eq(dup_mappings.attributes.first.attribute?)
|
995
|
+
end
|
889
996
|
end
|
890
997
|
end
|
891
998
|
|
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.5.
|
4
|
+
version: 0.5.4
|
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-01-
|
11
|
+
date: 2025-01-24 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: thor
|
@@ -57,6 +57,7 @@ files:
|
|
57
57
|
- lib/lutaml/model/comparable_nil.rb
|
58
58
|
- lib/lutaml/model/comparison.rb
|
59
59
|
- lib/lutaml/model/config.rb
|
60
|
+
- lib/lutaml/model/constants.rb
|
60
61
|
- lib/lutaml/model/error.rb
|
61
62
|
- lib/lutaml/model/error/collection_count_out_of_range_error.rb
|
62
63
|
- lib/lutaml/model/error/collection_true_missing_error.rb
|
@@ -64,6 +65,7 @@ files:
|
|
64
65
|
- lib/lutaml/model/error/invalid_value_error.rb
|
65
66
|
- lib/lutaml/model/error/multiple_mappings_error.rb
|
66
67
|
- lib/lutaml/model/error/pattern_not_matched_error.rb
|
68
|
+
- lib/lutaml/model/error/type/invalid_value_error.rb
|
67
69
|
- lib/lutaml/model/error/type_error.rb
|
68
70
|
- lib/lutaml/model/error/type_not_enabled_error.rb
|
69
71
|
- lib/lutaml/model/error/unknown_adapter_type_error.rb
|
@@ -83,6 +85,8 @@ files:
|
|
83
85
|
- lib/lutaml/model/schema/json_schema.rb
|
84
86
|
- lib/lutaml/model/schema/json_schema_parser.rb
|
85
87
|
- lib/lutaml/model/schema/relaxng_schema.rb
|
88
|
+
- lib/lutaml/model/schema/templates/simple_type.rb
|
89
|
+
- lib/lutaml/model/schema/xml_compiler.rb
|
86
90
|
- lib/lutaml/model/schema/xsd_schema.rb
|
87
91
|
- lib/lutaml/model/schema/yaml_schema.rb
|
88
92
|
- lib/lutaml/model/schema_location.rb
|
@@ -134,9 +138,13 @@ files:
|
|
134
138
|
- spec/fixtures/person.rb
|
135
139
|
- spec/fixtures/sample_model.rb
|
136
140
|
- spec/fixtures/vase.rb
|
141
|
+
- spec/fixtures/xml/invalid_math_document.xml
|
137
142
|
- spec/fixtures/xml/latin_encoding.xml
|
143
|
+
- spec/fixtures/xml/math_document_schema.xsd
|
138
144
|
- spec/fixtures/xml/shift_jis.xml
|
139
145
|
- spec/fixtures/xml/special_char.xml
|
146
|
+
- spec/fixtures/xml/test_schema.xsd
|
147
|
+
- spec/fixtures/xml/valid_math_document.xml
|
140
148
|
- spec/lutaml/model/attribute_spec.rb
|
141
149
|
- spec/lutaml/model/cdata_spec.rb
|
142
150
|
- spec/lutaml/model/collection_spec.rb
|
@@ -150,6 +158,7 @@ files:
|
|
150
158
|
- spec/lutaml/model/inheritance_spec.rb
|
151
159
|
- spec/lutaml/model/json_adapter_spec.rb
|
152
160
|
- spec/lutaml/model/key_value_mapping_spec.rb
|
161
|
+
- spec/lutaml/model/map_all_spec.rb
|
153
162
|
- spec/lutaml/model/map_content_spec.rb
|
154
163
|
- spec/lutaml/model/mixed_content_spec.rb
|
155
164
|
- spec/lutaml/model/multiple_mapping_spec.rb
|
@@ -159,6 +168,7 @@ files:
|
|
159
168
|
- spec/lutaml/model/root_mappings_spec.rb
|
160
169
|
- spec/lutaml/model/schema/json_schema_spec.rb
|
161
170
|
- spec/lutaml/model/schema/relaxng_schema_spec.rb
|
171
|
+
- spec/lutaml/model/schema/xml_compiler_spec.rb
|
162
172
|
- spec/lutaml/model/schema/xsd_schema_spec.rb
|
163
173
|
- spec/lutaml/model/schema/yaml_schema_spec.rb
|
164
174
|
- spec/lutaml/model/serializable_spec.rb
|