schematic 0.0.7 → 0.0.8
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.
- data/lib/schematic/serializers/xsd.rb +10 -9
- data/lib/schematic/version.rb +1 -1
- data/spec/schematic_serializers_xsd_spec.rb +59 -60
- metadata +3 -5
@@ -9,7 +9,7 @@ module Schematic
|
|
9
9
|
|
10
10
|
def to_xsd(options = {})
|
11
11
|
output = ""
|
12
|
-
builder = Builder::XmlMarkup.new(:target => output)
|
12
|
+
builder = Builder::XmlMarkup.new(:target => output, :indent => 2)
|
13
13
|
builder.instruct!
|
14
14
|
builder.xs :schema, "xmlns:xs" => "http://www.w3.org/2001/XMLSchema" do |schema|
|
15
15
|
schema.xs :element, "name" => xsd_element_collection_name, "type" => xsd_type_collection_name
|
@@ -112,19 +112,20 @@ module Schematic
|
|
112
112
|
additional_methods.each do |method_name, values|
|
113
113
|
method_xsd_name = method_name.to_s.dasherize
|
114
114
|
if values.present?
|
115
|
-
|
116
|
-
builder.xs :element, {"name" => method_xsd_name, "minOccurs" => "0"}.merge(max_occurrences) do |element|
|
115
|
+
builder.xs :element, "name" => method_xsd_name, "minOccurs" => "0", "maxOccurs" => "1" do |element|
|
117
116
|
element.xs :complexType do |complex_type|
|
118
|
-
|
119
|
-
|
117
|
+
if values.is_a?(Array)
|
118
|
+
complex_type.xs :sequence do |nested_sequence|
|
120
119
|
values.each do |value|
|
121
|
-
|
120
|
+
nested_sequence.xs :element, "name" => value.to_s.dasherize, "minOccurs" => "0", "maxOccurs" => "unbounded"
|
122
121
|
end
|
123
|
-
|
122
|
+
end
|
123
|
+
elsif values.is_a?(Hash)
|
124
|
+
complex_type.xs :all do |nested_all|
|
124
125
|
generate_xsd_additional_methods(nested_all, values)
|
125
|
-
else
|
126
|
-
raise "Additional methods must be a hash of hashes or hash of arrays"
|
127
126
|
end
|
127
|
+
else
|
128
|
+
raise "Additional methods must be a hash of hashes or hash of arrays"
|
128
129
|
end
|
129
130
|
complex_type.xs :attribute, "name" => "type", "type" => "xs:string", "fixed" => "array", "use" => "optional"
|
130
131
|
end
|
data/lib/schematic/version.rb
CHANGED
@@ -160,24 +160,24 @@ describe Schematic::Serializers::Xsd do
|
|
160
160
|
end
|
161
161
|
|
162
162
|
context "for an empty model with no attributes or validations" do
|
163
|
-
subject { EmptyModel.to_xsd }
|
163
|
+
subject { sanitize_xml(EmptyModel.to_xsd) }
|
164
164
|
|
165
165
|
it "should return an xsd for an array of the model" do
|
166
166
|
xsd = <<-XML
|
167
|
-
<?xml version="1.0" encoding="UTF-8"?>
|
168
|
-
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
|
169
|
-
|
170
|
-
|
171
|
-
|
172
|
-
|
173
|
-
|
174
|
-
|
175
|
-
|
176
|
-
|
177
|
-
|
178
|
-
|
179
|
-
|
180
|
-
</xs:schema>
|
167
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
168
|
+
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
|
169
|
+
<xs:element name="empty-models" type="EmptyModels"/>
|
170
|
+
<xs:complexType name="EmptyModels">
|
171
|
+
<xs:sequence>
|
172
|
+
<xs:element name="empty-model" type="EmptyModel" minOccurs="0" maxOccurs="unbounded"/>
|
173
|
+
</xs:sequence>
|
174
|
+
<xs:attribute name="type" type="xs:string" fixed="array"/>
|
175
|
+
</xs:complexType>
|
176
|
+
<xs:complexType name="EmptyModel">
|
177
|
+
<xs:all>
|
178
|
+
</xs:all>
|
179
|
+
</xs:complexType>
|
180
|
+
</xs:schema>
|
181
181
|
XML
|
182
182
|
subject.should == sanitize_xml(xsd)
|
183
183
|
end
|
@@ -186,7 +186,7 @@ describe Schematic::Serializers::Xsd do
|
|
186
186
|
|
187
187
|
context "for a model with attributes" do
|
188
188
|
|
189
|
-
subject { SomeModel.to_xsd }
|
189
|
+
subject { sanitize_xml(SomeModel.to_xsd) }
|
190
190
|
|
191
191
|
context "for a any attribute" do
|
192
192
|
with_model :some_model do
|
@@ -210,7 +210,7 @@ describe Schematic::Serializers::Xsd do
|
|
210
210
|
XML
|
211
211
|
end
|
212
212
|
|
213
|
-
subject.should ==
|
213
|
+
subject.should == xsd
|
214
214
|
end
|
215
215
|
|
216
216
|
end
|
@@ -236,14 +236,14 @@ describe Schematic::Serializers::Xsd do
|
|
236
236
|
XML
|
237
237
|
end
|
238
238
|
|
239
|
-
SomeModel.to_xsd(:methods => {:foo_bar => nil}).should ==
|
239
|
+
sanitize_xml(SomeModel.to_xsd(:methods => {:foo_bar => nil})).should == xsd
|
240
240
|
end
|
241
241
|
end
|
242
242
|
|
243
243
|
end
|
244
244
|
|
245
245
|
context "with a model with validations" do
|
246
|
-
subject { SomeModel.to_xsd }
|
246
|
+
subject { sanitize_xml(SomeModel.to_xsd) }
|
247
247
|
|
248
248
|
context "presence of validation" do
|
249
249
|
|
@@ -273,7 +273,7 @@ describe Schematic::Serializers::Xsd do
|
|
273
273
|
XML
|
274
274
|
end
|
275
275
|
|
276
|
-
subject.should ==
|
276
|
+
subject.should == xsd
|
277
277
|
end
|
278
278
|
end
|
279
279
|
|
@@ -303,7 +303,7 @@ describe Schematic::Serializers::Xsd do
|
|
303
303
|
XML
|
304
304
|
end
|
305
305
|
|
306
|
-
subject.should ==
|
306
|
+
subject.should == xsd
|
307
307
|
end
|
308
308
|
end
|
309
309
|
|
@@ -333,7 +333,7 @@ describe Schematic::Serializers::Xsd do
|
|
333
333
|
XML
|
334
334
|
end
|
335
335
|
|
336
|
-
subject.should ==
|
336
|
+
subject.should == xsd
|
337
337
|
end
|
338
338
|
end
|
339
339
|
end
|
@@ -376,7 +376,7 @@ describe Schematic::Serializers::Xsd do
|
|
376
376
|
XML
|
377
377
|
end
|
378
378
|
|
379
|
-
SomeModel.to_xsd.should
|
379
|
+
sanitize_xml(SomeModel.to_xsd).should eq(xsd)
|
380
380
|
end
|
381
381
|
end
|
382
382
|
|
@@ -386,7 +386,7 @@ describe Schematic::Serializers::Xsd do
|
|
386
386
|
|
387
387
|
model do
|
388
388
|
def self.xsd_methods
|
389
|
-
{:foo => [:bar
|
389
|
+
{:foo => [:bar]}
|
390
390
|
end
|
391
391
|
end
|
392
392
|
end
|
@@ -394,28 +394,26 @@ describe Schematic::Serializers::Xsd do
|
|
394
394
|
it "should include the additional methods" do
|
395
395
|
xsd = generate_xsd_for_model(SomeModel) do
|
396
396
|
<<-XML
|
397
|
-
|
398
|
-
|
399
|
-
|
400
|
-
|
401
|
-
|
402
|
-
|
403
|
-
|
404
|
-
|
405
|
-
|
406
|
-
|
407
|
-
|
408
|
-
|
409
|
-
|
410
|
-
|
411
|
-
|
412
|
-
|
413
|
-
|
414
|
-
</xs:element>
|
397
|
+
<xs:element name="id" minOccurs="0" maxOccurs="1">
|
398
|
+
<xs:complexType>
|
399
|
+
<xs:simpleContent>
|
400
|
+
<xs:extension base="xs:integer">
|
401
|
+
<xs:attribute name="type" type="xs:string" use="optional"/>
|
402
|
+
</xs:extension>
|
403
|
+
</xs:simpleContent>
|
404
|
+
</xs:complexType>
|
405
|
+
</xs:element>
|
406
|
+
<xs:element name="foo" minOccurs="0" maxOccurs="1">
|
407
|
+
<xs:complexType>
|
408
|
+
<xs:sequence>
|
409
|
+
<xs:element name="bar" minOccurs="0" maxOccurs="unbounded"/>
|
410
|
+
</xs:sequence>
|
411
|
+
<xs:attribute name="type" type="xs:string" fixed="array" use="optional"/>
|
412
|
+
</xs:complexType>
|
413
|
+
</xs:element>
|
415
414
|
XML
|
416
415
|
end
|
417
|
-
|
418
|
-
SomeModel.to_xsd.should == sanitize_xml(xsd)
|
416
|
+
sanitize_xml(SomeModel.to_xsd).should eq(xsd)
|
419
417
|
end
|
420
418
|
end
|
421
419
|
|
@@ -442,10 +440,10 @@ describe Schematic::Serializers::Xsd do
|
|
442
440
|
</xs:simpleContent>
|
443
441
|
</xs:complexType>
|
444
442
|
</xs:element>
|
445
|
-
<xs:element name="foo" minOccurs="0">
|
443
|
+
<xs:element name="foo" minOccurs="0" maxOccurs="1">
|
446
444
|
<xs:complexType>
|
447
445
|
<xs:all>
|
448
|
-
<xs:element name="bar" minOccurs="0">
|
446
|
+
<xs:element name="bar" minOccurs="0" maxOccurs="1">
|
449
447
|
<xs:complexType>
|
450
448
|
<xs:all>
|
451
449
|
<xs:element name="baz" minOccurs="0" maxOccurs="1"/>
|
@@ -460,7 +458,7 @@ describe Schematic::Serializers::Xsd do
|
|
460
458
|
XML
|
461
459
|
end
|
462
460
|
|
463
|
-
SomeModel.to_xsd.should
|
461
|
+
sanitize_xml(SomeModel.to_xsd).should eq(xsd)
|
464
462
|
end
|
465
463
|
end
|
466
464
|
end
|
@@ -483,7 +481,7 @@ describe Schematic::Serializers::Xsd do
|
|
483
481
|
xsd = generate_xsd_for_model(SomeModel) do
|
484
482
|
end
|
485
483
|
|
486
|
-
SomeModel.to_xsd.should
|
484
|
+
sanitize_xml(SomeModel.to_xsd).should eq(xsd)
|
487
485
|
end
|
488
486
|
end
|
489
487
|
|
@@ -546,26 +544,27 @@ describe Schematic::Serializers::Xsd do
|
|
546
544
|
end
|
547
545
|
|
548
546
|
def sanitize_xml(xml)
|
549
|
-
xml.split("\n").map(&:strip).join("")
|
547
|
+
xml.split("\n").reject(&:blank?).map(&:strip).join("\n")
|
550
548
|
end
|
551
549
|
|
552
550
|
def generate_xsd_for_model(model)
|
553
|
-
<<-XML
|
554
|
-
|
555
|
-
|
556
|
-
|
557
|
-
|
551
|
+
output = <<-XML
|
552
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
553
|
+
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
|
554
|
+
<xs:element name="#{model.xsd_element_collection_name}" type="#{model.xsd_type_collection_name}"/>
|
555
|
+
<xs:complexType name="#{model.xsd_type_collection_name}">
|
558
556
|
<xs:sequence>
|
559
|
-
|
557
|
+
<xs:element name="#{model.xsd_element_name}" type="#{model.xsd_type_name}" minOccurs="0" maxOccurs="unbounded"/>
|
560
558
|
</xs:sequence>
|
561
559
|
<xs:attribute name="type" type="xs:string" fixed="array"/>
|
562
|
-
|
563
|
-
|
560
|
+
</xs:complexType>
|
561
|
+
<xs:complexType name="#{model.xsd_type_name}">
|
564
562
|
<xs:all>
|
565
|
-
|
563
|
+
#{yield}
|
566
564
|
</xs:all>
|
567
|
-
|
568
|
-
|
565
|
+
</xs:complexType>
|
566
|
+
</xs:schema>
|
569
567
|
XML
|
568
|
+
sanitize_xml(output)
|
570
569
|
end
|
571
570
|
end
|
metadata
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
name: schematic
|
3
3
|
version: !ruby/object:Gem::Version
|
4
4
|
prerelease:
|
5
|
-
version: 0.0.
|
5
|
+
version: 0.0.8
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- Case Commons, LLC
|
@@ -10,8 +10,7 @@ autorequire:
|
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
12
|
|
13
|
-
date: 2011-04-
|
14
|
-
default_executable:
|
13
|
+
date: 2011-04-27 00:00:00 Z
|
15
14
|
dependencies:
|
16
15
|
- !ruby/object:Gem::Dependency
|
17
16
|
name: activerecord
|
@@ -103,7 +102,6 @@ files:
|
|
103
102
|
- spec/spec_helper.rb
|
104
103
|
- spec/xsd/XMLSchema.xsd
|
105
104
|
- spec/xsd/xml.xsd
|
106
|
-
has_rdoc: true
|
107
105
|
homepage: https://github.com/Casecommons/schematic
|
108
106
|
licenses: []
|
109
107
|
|
@@ -127,7 +125,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
127
125
|
requirements: []
|
128
126
|
|
129
127
|
rubyforge_project: schematic
|
130
|
-
rubygems_version: 1.
|
128
|
+
rubygems_version: 1.7.2
|
131
129
|
signing_key:
|
132
130
|
specification_version: 3
|
133
131
|
summary: Automatic XSD generation from ActiveRecord models
|