lutaml-model 0.3.29 → 0.3.30
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-repos.json +15 -0
- data/.github/workflows/dependent-tests.yml +14 -0
- data/.rubocop_todo.yml +15 -7
- data/lib/lutaml/model/json_adapter/json_document.rb +1 -1
- data/lib/lutaml/model/json_adapter/multi_json_adapter.rb +1 -1
- data/lib/lutaml/model/json_adapter/standard_json_adapter.rb +1 -1
- data/lib/lutaml/model/serialize.rb +16 -14
- data/lib/lutaml/model/toml_adapter/toml_document.rb +1 -1
- data/lib/lutaml/model/toml_adapter/toml_rb_adapter.rb +1 -1
- data/lib/lutaml/model/toml_adapter/tomlib_adapter.rb +1 -1
- data/lib/lutaml/model/version.rb +1 -1
- data/lib/lutaml/model/xml_adapter/builder/nokogiri.rb +10 -0
- data/lib/lutaml/model/xml_adapter/builder/ox.rb +5 -1
- data/lib/lutaml/model/xml_adapter/nokogiri_adapter.rb +5 -3
- data/lib/lutaml/model/xml_adapter/oga_adapter.rb +1 -1
- data/lib/lutaml/model/xml_adapter/ox_adapter.rb +25 -10
- data/lib/lutaml/model/xml_adapter/xml_document.rb +12 -24
- data/lib/lutaml/model/yaml_adapter/standard_yaml_adapter.rb +1 -1
- data/lib/lutaml/model/yaml_adapter/yaml_document.rb +1 -1
- data/spec/fixtures/xml/latin_encoding.xml +5 -0
- data/spec/fixtures/xml/shift_jis.xml +4 -0
- data/spec/lutaml/model/defaults_spec.rb +74 -0
- data/spec/lutaml/model/mixed_content_spec.rb +190 -7
- data/spec/lutaml/model/xml_mapping_spec.rb +679 -543
- metadata +6 -2
@@ -72,6 +72,28 @@ module MixedContentSpec
|
|
72
72
|
end
|
73
73
|
end
|
74
74
|
|
75
|
+
class Latin < Lutaml::Model::Serializable
|
76
|
+
attribute :the, :string
|
77
|
+
attribute :from, :string
|
78
|
+
attribute :heading, :string
|
79
|
+
|
80
|
+
xml do
|
81
|
+
root "note"
|
82
|
+
map_element "to", to: :the
|
83
|
+
map_element "from", to: :from
|
84
|
+
map_element "heading", to: :heading
|
85
|
+
end
|
86
|
+
end
|
87
|
+
|
88
|
+
class Shift < Lutaml::Model::Serializable
|
89
|
+
attribute :field, :string, collection: true
|
90
|
+
|
91
|
+
xml do
|
92
|
+
root "root"
|
93
|
+
map_element "FieldName", to: :field
|
94
|
+
end
|
95
|
+
end
|
96
|
+
|
75
97
|
class SpecialCharContentWithMixedTrue < Lutaml::Model::Serializable
|
76
98
|
attribute :content, :string
|
77
99
|
|
@@ -651,24 +673,185 @@ RSpec.describe "MixedContent" do
|
|
651
673
|
|
652
674
|
context "when encoding: nil xml" do
|
653
675
|
let(:expected_encoding_nil_nokogiri_xml) { "∑computer security∏ type of ​ operation specified µ by an access right" }
|
654
|
-
let(:expected_encoding_nil_ox_xml) { "
|
676
|
+
let(:expected_encoding_nil_ox_xml) { "∑computer security∏ type of operation specified µ by an access right" }
|
655
677
|
|
656
678
|
it "serializes special char mixed content correctly with encoding: nil to get hexcode" do
|
657
679
|
parsed = MixedContentSpec::HexCode.from_xml(xml)
|
658
680
|
serialized = parsed.to_xml(encoding: nil)
|
659
681
|
|
660
|
-
if adapter_class == Lutaml::Model::XmlAdapter::OxAdapter
|
661
|
-
|
662
|
-
|
663
|
-
|
664
|
-
|
665
|
-
end
|
682
|
+
expected_output = if adapter_class == Lutaml::Model::XmlAdapter::OxAdapter
|
683
|
+
expected_encoding_nil_ox_xml
|
684
|
+
else
|
685
|
+
expected_encoding_nil_nokogiri_xml
|
686
|
+
end
|
666
687
|
|
667
688
|
expect(serialized.strip).to include(expected_output)
|
668
689
|
end
|
669
690
|
end
|
670
691
|
end
|
671
692
|
end
|
693
|
+
|
694
|
+
context "when use encoding in parsing" do
|
695
|
+
context "when use SHIFT-JIS encoding" do
|
696
|
+
let(:fixture) { File.read(fixture_path("xml/shift_jis.xml"), encoding: "Shift_JIS") }
|
697
|
+
|
698
|
+
describe ".from_xml" do
|
699
|
+
it "verifies the encoding of file read" do
|
700
|
+
expect(fixture.encoding.to_s).to eq("Shift_JIS")
|
701
|
+
end
|
702
|
+
|
703
|
+
it "deserializes SHIFT encoded content correctly with explicit encoding option" do
|
704
|
+
parsed = MixedContentSpec::Shift.from_xml(fixture, encoding: "Shift_JIS")
|
705
|
+
|
706
|
+
expected_content = if adapter_class == Lutaml::Model::XmlAdapter::OxAdapter
|
707
|
+
"\x8E\xE8\x8F\x91\x82\xAB\x89p\x8E\x9A\x82P".force_encoding("Shift_JIS")
|
708
|
+
else
|
709
|
+
"手書き英字1"
|
710
|
+
end
|
711
|
+
|
712
|
+
expect(parsed.field).to include(expected_content)
|
713
|
+
end
|
714
|
+
|
715
|
+
it "deserializes SHIFT encoded content incorrectly without explicit encoding option" do
|
716
|
+
parsed = MixedContentSpec::Shift.from_xml(fixture)
|
717
|
+
|
718
|
+
expected_content = if adapter_class == Lutaml::Model::XmlAdapter::OxAdapter
|
719
|
+
"\x8E\xE8\x8F\x91\x82\xAB\x89p\x8E\x9A\x82P".force_encoding("UTF-8")
|
720
|
+
else
|
721
|
+
"�菑���p���P"
|
722
|
+
end
|
723
|
+
|
724
|
+
expect(parsed.field).to include(expected_content)
|
725
|
+
end
|
726
|
+
end
|
727
|
+
|
728
|
+
describe ".to_xml" do
|
729
|
+
it "serializes SHIFT-JIS encoding content correctly reading from file" do
|
730
|
+
parsed = MixedContentSpec::Shift.from_xml(fixture, encoding: "Shift_JIS")
|
731
|
+
serialized = parsed.to_xml
|
732
|
+
|
733
|
+
expect(serialized.strip).to eq(fixture.strip)
|
734
|
+
end
|
735
|
+
|
736
|
+
it "serializes SHIFT encoded content correctly with explicit encoding option both in parsing and deserializing" do
|
737
|
+
parsed = MixedContentSpec::Shift.from_xml(fixture, encoding: "Shift_JIS")
|
738
|
+
serialized = parsed.to_xml(encoding: "UTF-8")
|
739
|
+
|
740
|
+
expected_xml = if adapter_class == Lutaml::Model::XmlAdapter::OxAdapter
|
741
|
+
"\x8E\xE8\x8F\x91\x82\xAB\x89p\x8E\x9A\x82P".force_encoding("Shift_JIS")
|
742
|
+
else
|
743
|
+
"手書き英字1"
|
744
|
+
end
|
745
|
+
|
746
|
+
expect(parsed.field).to include(expected_xml)
|
747
|
+
expect(parsed.encoding).to eq("Shift_JIS")
|
748
|
+
|
749
|
+
expect(serialized).to include("手書き英字1")
|
750
|
+
expect(serialized.encoding.to_s).to eq("UTF-8")
|
751
|
+
end
|
752
|
+
|
753
|
+
it "serializes SHIFT encoded content correctly with explicit encoding option" do
|
754
|
+
parsed = MixedContentSpec::Shift.from_xml(fixture, encoding: "Shift_JIS")
|
755
|
+
serialized = parsed.to_xml(encoding: "Shift_JIS")
|
756
|
+
|
757
|
+
expected_xml = if adapter_class == Lutaml::Model::XmlAdapter::OxAdapter
|
758
|
+
"\x8E\xE8\x8F\x91\x82\xAB\x89p\x8E\x9A\x82P".force_encoding("Shift_JIS")
|
759
|
+
else
|
760
|
+
"手書き英字1"
|
761
|
+
end
|
762
|
+
|
763
|
+
expect(parsed.field).to include(expected_xml)
|
764
|
+
expect(parsed.encoding).to eq("Shift_JIS")
|
765
|
+
|
766
|
+
expect(serialized).to include("\x8E\xE8\x8F\x91\x82\xAB\x89p\x8E\x9A\x82P".force_encoding("Shift_JIS"))
|
767
|
+
expect(serialized.encoding.to_s).to eq("Shift_JIS")
|
768
|
+
end
|
769
|
+
|
770
|
+
it "serializes SHIFT encoded content correctly with declaration: true" do
|
771
|
+
parsed = MixedContentSpec::Shift.from_xml(fixture, encoding: "Shift_JIS")
|
772
|
+
serialized = parsed.to_xml(declaration: true, encoding: "Shift_JIS")
|
773
|
+
|
774
|
+
expected_xml = "<?xml version=\"1.0\" encoding=\"Shift_JIS\"?>\n<root>\n <FieldName>\x8E\xE8\x8F\x91\x82\xAB\x89p\x8E\x9A\x82P</FieldName>\n <FieldName>123456</FieldName>\n</root>"
|
775
|
+
|
776
|
+
expect(serialized).to be_equivalent_to(expected_xml)
|
777
|
+
expect(serialized.encoding.to_s).to eq("Shift_JIS")
|
778
|
+
end
|
779
|
+
|
780
|
+
it "serializes SHIFT-JIS content incorrectly bcz no encoding provided during parsing" do
|
781
|
+
parsed = MixedContentSpec::Shift.from_xml(fixture)
|
782
|
+
serialized = parsed.to_xml(encoding: "Shift_JIS")
|
783
|
+
|
784
|
+
expected_content = if adapter_class == Lutaml::Model::XmlAdapter::OxAdapter
|
785
|
+
"<root>\n <FieldName>\x8E菑\x82\xAB\x89p\x8E\x9A\x82P</FieldName>\n <FieldName>123456</FieldName>\n</root>\n"
|
786
|
+
else
|
787
|
+
"<root>\n <FieldName>�菑���p���P</FieldName>\n <FieldName>123456</FieldName>\n</root>"
|
788
|
+
end
|
789
|
+
|
790
|
+
expect(serialized).to eq(expected_content)
|
791
|
+
end
|
792
|
+
|
793
|
+
it "serializes SHIFT-JIS encoding content correctly reading from string" do
|
794
|
+
xml = "<root><FieldName>手書き英字1</FieldName><FieldName>123456</FieldName></root>".encode("Shift_JIS")
|
795
|
+
parsed = MixedContentSpec::Shift.from_xml(xml, encoding: "Shift_JIS")
|
796
|
+
serialized = parsed.to_xml(encoding: "Shift_JIS")
|
797
|
+
|
798
|
+
expect(serialized).to be_equivalent_to(xml)
|
799
|
+
end
|
800
|
+
|
801
|
+
it "serializes SHIFT-JIS encoding content correctly" do
|
802
|
+
parsed = MixedContentSpec::Shift.from_xml(fixture, encoding: "Shift_JIS")
|
803
|
+
serialized = parsed.to_xml(encoding: "Shift_JIS")
|
804
|
+
|
805
|
+
expect(serialized).to be_equivalent_to(fixture)
|
806
|
+
end
|
807
|
+
end
|
808
|
+
end
|
809
|
+
|
810
|
+
context "when use LATIN (ISO-8859-1) encoding" do
|
811
|
+
let(:fixture) { File.read(fixture_path("xml/latin_encoding.xml"), encoding: "ISO-8859-1") }
|
812
|
+
|
813
|
+
describe ".from_xml" do
|
814
|
+
it "verifies the encoding of file read" do
|
815
|
+
expect(fixture.encoding.to_s).to eq("ISO-8859-1")
|
816
|
+
end
|
817
|
+
|
818
|
+
it "deserializes latin encoded content correctly" do
|
819
|
+
parsed = MixedContentSpec::Latin.from_xml(fixture, encoding: "ISO-8859-1")
|
820
|
+
|
821
|
+
expected_content = if adapter_class == Lutaml::Model::XmlAdapter::OxAdapter
|
822
|
+
["M\xFCller".force_encoding("ISO-8859-1"), "Jos\xE9".force_encoding("ISO-8859-1")]
|
823
|
+
else
|
824
|
+
["Müller", "José"]
|
825
|
+
end
|
826
|
+
|
827
|
+
expect(parsed.from).to eq(expected_content[0])
|
828
|
+
expect(parsed.the).to eq(expected_content[1])
|
829
|
+
end
|
830
|
+
|
831
|
+
it "deserializes latin encoded content incorrectly" do
|
832
|
+
parsed = MixedContentSpec::Latin.from_xml(fixture)
|
833
|
+
|
834
|
+
expected_content = if adapter_class == Lutaml::Model::XmlAdapter::OxAdapter
|
835
|
+
["M\xFCller", "Jos\xE9"]
|
836
|
+
else
|
837
|
+
["M�ller", "Jos�"]
|
838
|
+
end
|
839
|
+
|
840
|
+
expect(parsed.from).to eq(expected_content[0])
|
841
|
+
expect(parsed.the).to eq(expected_content[1])
|
842
|
+
end
|
843
|
+
end
|
844
|
+
|
845
|
+
describe ".to_xml" do
|
846
|
+
it "serializes latin encoded content correctly" do
|
847
|
+
parsed = MixedContentSpec::Latin.from_xml(fixture, encoding: "ISO-8859-1")
|
848
|
+
serialized = parsed.to_xml
|
849
|
+
|
850
|
+
expect(serialized.strip).to eq("<note>\n <to>Jos\xE9</to>\n <from>M\xFCller</from>\n <heading>Reminder</heading>\n</note>".force_encoding("ISO-8859-1"))
|
851
|
+
end
|
852
|
+
end
|
853
|
+
end
|
854
|
+
end
|
672
855
|
end
|
673
856
|
|
674
857
|
describe Lutaml::Model::XmlAdapter::NokogiriAdapter do
|