xsd-reader 0.0.1 → 0.1.0
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/Gemfile.lock +14 -0
- data/README.md +5 -4
- data/lib/xsd_reader/choice.rb +0 -3
- data/lib/xsd_reader/complex_content.rb +5 -0
- data/lib/xsd_reader/element.rb +2 -6
- data/lib/xsd_reader/extension.rb +8 -0
- data/lib/xsd_reader/import.rb +56 -0
- data/lib/xsd_reader/schema.rb +35 -0
- data/lib/xsd_reader/shared.rb +95 -58
- data/lib/xsd_reader/simple_type.rb +7 -0
- data/lib/xsd_reader/xml.rb +35 -2
- data/lib/xsd_reader.rb +3 -0
- data/spec/attribute_spec.rb +12 -12
- data/spec/element_spec.rb +28 -25
- data/spec/examples/ddex-v32/ddex.xsd +2116 -0
- data/spec/examples/ddex-v32/ddexC.xsd +5240 -0
- data/spec/examples/ddex-v32/ern-main.xsd +2980 -0
- data/spec/examples/ddex-v32/iso3166a2.xsd +1230 -0
- data/spec/examples/ddex-v32/iso4217a.xsd +900 -0
- data/spec/examples/ddex-v32/iso639a2.xsd +935 -0
- data/spec/examples/ddex-v36/avs.xsd +11257 -0
- data/spec/examples/{ddex-ern-v36.xsd → ddex-v36/ddex-ern-v36.xsd} +0 -0
- data/spec/extension_spec.rb +29 -0
- data/spec/import_spec.rb +48 -0
- data/spec/schema_spec.rb +63 -9
- data/spec/xml_spec.rb +7 -7
- data/spec/xsd_reader_spec.rb +172 -39
- data/xsd-reader.gemspec +2 -1
- metadata +28 -2
data/spec/element_spec.rb
CHANGED
@@ -2,22 +2,25 @@ require File.dirname(__FILE__) + '/spec_helper'
|
|
2
2
|
|
3
3
|
describe XsdReader::Element do
|
4
4
|
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
5
|
+
let(:reader){
|
6
|
+
XsdReader::XML.new(:xsd_file => File.expand_path(File.join(File.dirname(__FILE__), 'examples', 'ddex-v36', 'ddex-ern-v36.xsd')))
|
7
|
+
}
|
8
|
+
|
9
|
+
let(:element){
|
10
|
+
reader.elements[0]
|
11
|
+
}
|
9
12
|
|
10
13
|
it "gives the element's name" do
|
11
|
-
expect(
|
14
|
+
expect(element.name).to eq 'NewReleaseMessage'
|
12
15
|
end
|
13
16
|
|
14
17
|
it "gives a complex type reader" do
|
15
|
-
expect(
|
18
|
+
expect(element.complex_type.class).to eq XsdReader::ComplexType
|
16
19
|
end
|
17
20
|
|
18
21
|
it "gives child elements defined within a complex type" do
|
19
22
|
# byebug
|
20
|
-
expect(
|
23
|
+
expect(element.elements.map(&:name)).to eq [
|
21
24
|
"MessageHeader",
|
22
25
|
"UpdateIndicator",
|
23
26
|
"IsBackfill",
|
@@ -31,24 +34,24 @@ describe XsdReader::Element do
|
|
31
34
|
end
|
32
35
|
|
33
36
|
describe "External type definition" do
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
+
let(:header){
|
38
|
+
element.elements.first
|
39
|
+
}
|
37
40
|
|
38
41
|
it "gives the type name" do
|
39
|
-
expect(
|
42
|
+
expect(header.type_name).to eq 'MessageHeader'
|
40
43
|
end
|
41
44
|
|
42
45
|
it "gives the type namespace" do
|
43
|
-
expect(
|
46
|
+
expect(header.type_namespace).to eq 'ern'
|
44
47
|
end
|
45
48
|
|
46
49
|
it "gives the type string" do
|
47
|
-
expect(
|
50
|
+
expect(header.type).to eq 'ern:MessageHeader'
|
48
51
|
end
|
49
52
|
|
50
53
|
it "gives the remote complex_type, linked by type" do
|
51
|
-
expect(
|
54
|
+
expect(header.complex_type.name).to eq 'MessageHeader'
|
52
55
|
end
|
53
56
|
|
54
57
|
it "includes child elements defined in external the complex type type definitions" do
|
@@ -64,15 +67,15 @@ describe XsdReader::Element do
|
|
64
67
|
"Comment",
|
65
68
|
"MessageControlType"]
|
66
69
|
|
67
|
-
expect(
|
68
|
-
expect(
|
70
|
+
expect(header.elements.map(&:name)).to eq expected
|
71
|
+
expect(header.complex_type.all_elements.map(&:name)).to eq expected
|
69
72
|
end
|
70
73
|
end
|
71
74
|
|
72
75
|
describe "#elements" do
|
73
76
|
|
74
77
|
it "includes elements within a choice node" do
|
75
|
-
el =
|
78
|
+
el = element.elements[3]
|
76
79
|
expect(el.name).to eq 'CatalogTransfer'
|
77
80
|
elements_without = ["CatalogTransferCompleted", "EffectiveTransferDate", "CatalogReleaseReferenceList", "TransferringFrom", "TransferringTo"]
|
78
81
|
elements_with = ["CatalogTransferCompleted", "EffectiveTransferDate", "CatalogReleaseReferenceList", "TerritoryCode", "ExcludedTerritoryCode", "TransferringFrom", "TransferringTo"]
|
@@ -111,18 +114,18 @@ describe XsdReader::Element do
|
|
111
114
|
|
112
115
|
# byebug
|
113
116
|
|
114
|
-
expect(
|
117
|
+
expect(reader['NewReleaseMessage']['DealList']['ReleaseDeal']['Deal']['DealTerms'].elements.map(&:name)).to eq expected
|
115
118
|
end
|
116
119
|
end
|
117
120
|
|
118
121
|
# # this is pretty slow...
|
119
122
|
# describe "#family_tree" do
|
120
123
|
# before :each do
|
121
|
-
#
|
124
|
+
# element = reader.elements[0]
|
122
125
|
# end
|
123
126
|
|
124
127
|
# it "gives a family tree as a nested list of children, keys being nodes name, values being either another hash of children of strings with the names of the children" do
|
125
|
-
# expect(
|
128
|
+
# expect(element.family_tree.keys).to eq [
|
126
129
|
# "MessageHeader",
|
127
130
|
# "UpdateIndicator",
|
128
131
|
# "IsBackfill",
|
@@ -135,7 +138,7 @@ describe XsdReader::Element do
|
|
135
138
|
# "DealList"
|
136
139
|
# ]
|
137
140
|
|
138
|
-
# expect(
|
141
|
+
# expect(element.family_tree['ResourceList'].keys).to eq [
|
139
142
|
# "SoundRecording",
|
140
143
|
# "MIDI",
|
141
144
|
# "Video",
|
@@ -146,7 +149,7 @@ describe XsdReader::Element do
|
|
146
149
|
# "UserDefinedResource"
|
147
150
|
# ]
|
148
151
|
|
149
|
-
# expect(
|
152
|
+
# expect(element.family_tree['DealList']['ReleaseDeal']['Deal']['DealTerms']['RightsClaimPolicy']['Condition']['Unit']).to eq 'type:UnitOfConditionValue'
|
150
153
|
# end
|
151
154
|
# end
|
152
155
|
|
@@ -157,12 +160,12 @@ describe XsdReader::Element do
|
|
157
160
|
"BusinessProfileVersionId",
|
158
161
|
"ReleaseProfileVersionId",
|
159
162
|
"LanguageAndScriptCode"]
|
160
|
-
expect(
|
161
|
-
expect(
|
163
|
+
expect(element.attributes.map(&:name)).to eq expected
|
164
|
+
expect(element.complex_type.attributes.map(&:name)).to eq expected
|
162
165
|
end
|
163
166
|
|
164
167
|
it "gives attributes defined in a simpleContent extension" do
|
165
|
-
expect(
|
168
|
+
expect(element['ResourceList']['SoundRecording']['SoundRecordingDetailsByTerritory']['DisplayArtist']['ArtistRole'].attributes.map(&:name)).to eq ["Namespace", "UserDefinedValue"]
|
166
169
|
end
|
167
170
|
end
|
168
171
|
|