schematic 0.6.2 → 0.7.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.
Files changed (49) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +14 -8
  3. data/.travis.yml +17 -0
  4. data/Gemfile +6 -1
  5. data/LICENSE +1 -1
  6. data/README.md +106 -0
  7. data/Rakefile +3 -8
  8. data/lib/schematic.rb +3 -42
  9. data/lib/schematic/exceptions.rb +13 -0
  10. data/lib/schematic/generator/column.rb +17 -11
  11. data/lib/schematic/generator/namespaces.rb +3 -3
  12. data/lib/schematic/generator/restrictions/base.rb +5 -5
  13. data/lib/schematic/generator/restrictions/custom.rb +3 -2
  14. data/lib/schematic/generator/restrictions/enumeration.rb +5 -2
  15. data/lib/schematic/generator/restrictions/length.rb +4 -2
  16. data/lib/schematic/generator/restrictions/numericality.rb +3 -1
  17. data/lib/schematic/generator/restrictions/pattern.rb +4 -3
  18. data/lib/schematic/generator/sandbox.rb +4 -1
  19. data/lib/schematic/generator/types.rb +14 -13
  20. data/lib/schematic/generator/uniqueness.rb +7 -8
  21. data/lib/schematic/generator/xsd.rb +32 -26
  22. data/lib/schematic/serializers/xsd.rb +6 -6
  23. data/lib/schematic/version.rb +1 -1
  24. data/schematic.gemspec +23 -24
  25. data/spec/schematic/generator/restrictions/custom_spec.rb +15 -18
  26. data/spec/schematic/generator/restrictions/enumeration_spec.rb +31 -31
  27. data/spec/schematic/generator/restrictions/length_spec.rb +35 -30
  28. data/spec/schematic/generator/restrictions/mixin_spec.rb +11 -15
  29. data/spec/schematic/generator/restrictions/numericality_spec.rb +11 -11
  30. data/spec/schematic/generator/restrictions/pattern_spec.rb +20 -21
  31. data/spec/schematic/generator/sandbox_spec.rb +17 -17
  32. data/spec/schematic/generator/uniqueness_spec.rb +38 -37
  33. data/spec/schematic/serializers/xsd_extend_spec.rb +11 -11
  34. data/spec/schematic/serializers/xsd_validation_presence_spec.rb +16 -11
  35. data/spec/schematic/serializers/xsd_xsd_ignore_methods_spec.rb +3 -3
  36. data/spec/schematic/serializers/xsd_xsd_methods_spec.rb +27 -24
  37. data/spec/schematic/serializers/xsd_xsd_minimum_occurrences_for_spec.rb +13 -8
  38. data/spec/schematic_serializers_xsd_spec.rb +70 -67
  39. data/spec/spec_helper.rb +8 -113
  40. data/spec/support/database.rb +9 -0
  41. data/spec/support/helpers.rb +111 -0
  42. data/spec/support/with_model.rb +5 -0
  43. data/spec/{xsd → support/xsd}/XMLSchema.xsd +0 -0
  44. data/spec/{xsd → support/xsd}/xml.xsd +0 -0
  45. metadata +54 -69
  46. data/.rspec +0 -1
  47. data/.rvmrc +0 -1
  48. data/README.rdoc +0 -103
  49. data/spec/support/extensions/active_model/validations/inclusion.rb +0 -69
@@ -1,4 +1,4 @@
1
- require "spec_helper"
1
+ require 'spec_helper'
2
2
 
3
3
  describe Schematic::Serializers::Xsd do
4
4
 
@@ -9,38 +9,43 @@ describe Schematic::Serializers::Xsd do
9
9
  context "given a column with no validations" do
10
10
  with_model :some_model do
11
11
  table :id => false do |t|
12
- t.string "title"
12
+ t.string 'title'
13
+ end
14
+
15
+ model do
16
+ self.primary_key = :title
13
17
  end
14
18
  end
15
19
 
16
- it { should == 0 }
20
+ it { is_expected.to eq(0) }
17
21
  end
18
22
 
19
23
  context "given a column with presence of but allow blank" do
20
24
  with_model :some_model do
21
25
  table :id => false do |t|
22
- t.string "title"
26
+ t.string 'title'
23
27
  end
24
28
  model do
29
+ self.primary_key = :title
25
30
  validates :title, :presence => true, :allow_blank => true
26
31
  end
27
32
  end
28
33
 
29
- it { should == 0 }
34
+ it { is_expected.to eq(0) }
30
35
  end
31
36
 
32
37
  context "given a column with presence of and no allow blank" do
33
38
  with_model :some_model do
34
39
  table :id => false do |t|
35
- t.string "title"
40
+ t.string 'title'
36
41
  end
37
42
  model do
43
+ self.primary_key = :title
38
44
  validates :title, :presence => true
39
45
  end
40
46
  end
41
47
 
42
- it { should == 1 }
48
+ it { is_expected.to eq(1) }
43
49
  end
44
50
  end
45
-
46
51
  end
@@ -1,4 +1,4 @@
1
- require "spec_helper"
1
+ require 'spec_helper'
2
2
 
3
3
  describe Schematic::Serializers::Xsd do
4
4
  before do
@@ -31,7 +31,6 @@ describe Schematic::Serializers::Xsd do
31
31
  schematic do
32
32
  add :foo
33
33
  end
34
-
35
34
  end
36
35
  end
37
36
 
@@ -41,14 +40,14 @@ describe Schematic::Serializers::Xsd do
41
40
 
42
41
  it "should validate against it's own XSD" do
43
42
  invalid_instance = SomeClass.new
44
- invalid_instance.attributes = { "bar" => "foo" }
43
+ invalid_instance.attributes = { 'bar' => 'foo' }
45
44
  xml = [invalid_instance].to_xml
46
- lambda {
45
+ expect {
47
46
  validate_xml_against_xsd(xml, subject)
48
- }.should raise_error
47
+ }.to raise_error
49
48
 
50
49
  instance = SomeClass.new
51
- instance.attributes = { "foo" => "bar" }
50
+ instance.attributes = { 'foo' => 'bar' }
52
51
  xml = [instance].to_xml
53
52
  validate_xml_against_xsd(xml, subject)
54
53
  end
@@ -59,17 +58,19 @@ describe Schematic::Serializers::Xsd do
59
58
 
60
59
  with_model :some_model do
61
60
  table :id => false do |t|
62
- t.string "some_string"
63
- t.text "some_text"
64
- t.float "some_float"
65
- t.integer "some_integer"
66
- t.datetime "some_datetime"
67
- t.date "some_date"
68
- t.boolean "some_boolean"
61
+ t.string 'some_string'
62
+ t.text 'some_text'
63
+ t.float 'some_float'
64
+ t.integer 'some_integer'
65
+ t.datetime 'some_datetime'
66
+ t.date 'some_date'
67
+ t.boolean 'some_boolean'
69
68
  t.text "method_is_also_columns"
70
69
  end
71
70
 
72
71
  model do
72
+ self.primary_key = :some_string
73
+
73
74
  validates :some_string, :presence => true, :length => { :maximum => 100 }
74
75
  validates :some_text, :presence => true
75
76
  validates :some_date, :presence => true, :allow_blank => true
@@ -93,14 +94,14 @@ describe Schematic::Serializers::Xsd do
93
94
  end
94
95
 
95
96
  it "should validate against it's own XSD" do
96
- instance = SomeModel.new(:some_string => "ExampleString",
97
+ instance = SomeModel.new(:some_string => 'ExampleString',
97
98
  :some_date => Date.today,
98
- :some_text => "here is some text",
99
+ :some_text => 'here is some text',
99
100
  :some_datetime => DateTime.new,
100
101
  :some_boolean => true,
101
102
  :some_float => 1.5,
102
- :method_is_also_columns => ["somevalues"],
103
- :additional_method_array => {"somevalue" => "somekey"},
103
+ :method_is_also_columns => ['somevalues'],
104
+ :additional_method_array => {'somevalue' => 'somekey'},
104
105
  :some_integer => 2)
105
106
  xml = [instance].to_xml
106
107
  validate_xml_against_xsd(xml, subject)
@@ -116,7 +117,7 @@ describe Schematic::Serializers::Xsd do
116
117
 
117
118
  with_model :some_model do
118
119
  table do |t|
119
- t.string "some_string"
120
+ t.string 'some_string'
120
121
  end
121
122
 
122
123
  model do
@@ -158,7 +159,7 @@ describe Schematic::Serializers::Xsd do
158
159
  accepts_nested_attributes_for :parent
159
160
  end
160
161
  ::Parent.class_eval do
161
- has_many :children, :class_name => "Namespace::SubChild"
162
+ has_many :children, :class_name => 'Namespace::SubChild'
162
163
  accepts_nested_attributes_for :children
163
164
  end
164
165
  end
@@ -170,16 +171,16 @@ describe Schematic::Serializers::Xsd do
170
171
  child_instance = Namespace::SubChild.new(:parent_id => 123)
171
172
  child_instance.save!
172
173
  xml = [child_instance].to_xml
173
- lambda {
174
+ expect {
174
175
  validate_xml_against_xsd(xml, subject)
175
- }.should_not raise_error
176
+ }.not_to raise_error
176
177
  end
177
178
  end
178
179
 
179
180
  context "when the model has a nested attribute on a subclass with a different class name than the has_many association" do
180
181
  with_model :parent2 do
181
182
  model do
182
- has_many :children, :class_name => "SpecialChild"
183
+ has_many :children, :class_name => 'SpecialChild'
183
184
  accepts_nested_attributes_for :children
184
185
  end
185
186
  end
@@ -197,8 +198,8 @@ describe Schematic::Serializers::Xsd do
197
198
  subject { Parent2.to_xsd }
198
199
 
199
200
  it "should generate a valid XSD" do
200
- subject.should include "children-attributes"
201
- subject.should_not include "special-children-attributes"
201
+ expect(subject).to include 'children-attributes'
202
+ expect(subject).not_to include 'special-children-attributes'
202
203
  validate_xsd(subject)
203
204
  end
204
205
  end
@@ -224,9 +225,9 @@ describe Schematic::Serializers::Xsd do
224
225
  subject { Car.to_xsd }
225
226
 
226
227
  it "should generate a valid XSD" do
227
- subject.should include "engine-attributes"
228
- subject.should_not include "engines-attributes"
229
- subject.should_not include "Engines"
228
+ expect(subject).to include 'engine-attributes'
229
+ expect(subject).not_to include 'engines-attributes'
230
+ expect(subject).not_to include 'Engines'
230
231
  validate_xsd(subject)
231
232
  end
232
233
  end
@@ -255,7 +256,7 @@ describe Schematic::Serializers::Xsd do
255
256
  subject { Car.to_xsd }
256
257
 
257
258
  it "should generate a valid XSD" do
258
- subject.should_not include "engine-attributes"
259
+ expect(subject).not_to include 'engine-attributes'
259
260
  validate_xsd(subject)
260
261
  end
261
262
  end
@@ -287,9 +288,9 @@ describe Schematic::Serializers::Xsd do
287
288
  subject { Parent.to_xsd }
288
289
 
289
290
  it "should be valid" do
290
- subject.should include "child-attributes"
291
- subject.should include "first-name"
292
- subject.should_not include "last-name"
291
+ expect(subject).to include 'child-attributes'
292
+ expect(subject).to include 'first-name'
293
+ expect(subject).not_to include 'last-name'
293
294
  validate_xsd(subject)
294
295
  end
295
296
  end
@@ -298,8 +299,8 @@ describe Schematic::Serializers::Xsd do
298
299
  subject { Child.to_xsd }
299
300
 
300
301
  it "should be valid" do
301
- subject.should include "first-name"
302
- subject.should include "last-name"
302
+ expect(subject).to include 'first-name'
303
+ expect(subject).to include 'last-name'
303
304
  validate_xsd(subject)
304
305
  end
305
306
  end
@@ -337,9 +338,9 @@ describe Schematic::Serializers::Xsd do
337
338
  subject { Parent.to_xsd }
338
339
 
339
340
  it "should be valid" do
340
- subject.should include "child-attributes"
341
- subject.should include "first-name"
342
- subject.should include "last-name"
341
+ expect(subject).to include 'child-attributes'
342
+ expect(subject).to include 'first-name'
343
+ expect(subject).to include 'last-name'
343
344
  validate_xsd(subject)
344
345
  end
345
346
  end
@@ -348,8 +349,8 @@ describe Schematic::Serializers::Xsd do
348
349
  subject { Child.to_xsd }
349
350
 
350
351
  it "should be valid" do
351
- subject.should include "first-name"
352
- subject.should include "last-name"
352
+ expect(subject).to include 'first-name'
353
+ expect(subject).to include 'last-name'
353
354
  validate_xsd(subject)
354
355
  end
355
356
  end
@@ -381,9 +382,9 @@ describe Schematic::Serializers::Xsd do
381
382
  describe "the parent XSD" do
382
383
  subject { Person.to_xsd }
383
384
  it "should be valid" do
384
- subject.should include %{"house-attributes"}
385
- subject.should include %{"price"}
386
- subject.should_not include %{"address"}
385
+ expect(subject).to include %q{"house-attributes"}
386
+ expect(subject).to include %q{"price"}
387
+ expect(subject).not_to include %q{"address"}
387
388
  validate_xsd(subject)
388
389
  end
389
390
  end
@@ -391,8 +392,8 @@ describe Schematic::Serializers::Xsd do
391
392
  describe "the child XSD" do
392
393
  subject { House.to_xsd }
393
394
  it "should be valid" do
394
- subject.should include %{"price"}
395
- subject.should include %{"address"}
395
+ expect(subject).to include %q{"price"}
396
+ expect(subject).to include %q{"address"}
396
397
  validate_xsd(subject)
397
398
  end
398
399
  end
@@ -411,7 +412,7 @@ describe Schematic::Serializers::Xsd do
411
412
  end
412
413
 
413
414
  model do
414
- belongs_to :university, class_name: "School"
415
+ belongs_to :university, class_name: 'School'
415
416
 
416
417
  accepts_nested_attributes_for :university
417
418
  end
@@ -472,9 +473,9 @@ describe Schematic::Serializers::Xsd do
472
473
  describe "the parent XSD" do
473
474
  subject { Person.to_xsd }
474
475
  it "should be valid" do
475
- subject.should include %{"house-attributes"}
476
- subject.should include %{"price"}
477
- subject.should_not include %{"address"}
476
+ expect(subject).to include %q{"house-attributes"}
477
+ expect(subject).to include %q{"price"}
478
+ expect(subject).not_to include %q{"address"}
478
479
  validate_xsd(subject)
479
480
  end
480
481
  end
@@ -482,8 +483,8 @@ describe Schematic::Serializers::Xsd do
482
483
  describe "the child XSD" do
483
484
  subject { House.to_xsd }
484
485
  it "should be valid" do
485
- subject.should include %{"price"}
486
- subject.should include %{"address"}
486
+ expect(subject).to include %q{"price"}
487
+ expect(subject).to include %q{"address"}
487
488
  validate_xsd(subject)
488
489
  end
489
490
  end
@@ -632,7 +633,7 @@ describe Schematic::Serializers::Xsd do
632
633
  </xs:complexType>
633
634
  </xs:schema>
634
635
  XML
635
- subject.should == sanitize_xml(xsd)
636
+ expect(subject).to eq(sanitize_xml(xsd))
636
637
  end
637
638
 
638
639
  end
@@ -646,6 +647,10 @@ describe Schematic::Serializers::Xsd do
646
647
  table :id => false do |t|
647
648
  t.float 'some_float'
648
649
  end
650
+
651
+ model do
652
+ self.primary_key = :some_float
653
+ end
649
654
  end
650
655
 
651
656
  it "should define the correct xsd element" do
@@ -662,7 +667,7 @@ describe Schematic::Serializers::Xsd do
662
667
  XML
663
668
  end
664
669
 
665
- subject.should == xsd
670
+ expect(subject).to eq(xsd)
666
671
  end
667
672
 
668
673
  end
@@ -693,7 +698,7 @@ describe Schematic::Serializers::Xsd do
693
698
  XML
694
699
  end
695
700
 
696
- sanitize_xml(SomeModel.to_xsd(:methods => {:foo_bar => nil})).should == xsd
701
+ expect(sanitize_xml(SomeModel.to_xsd(:methods => {:foo_bar => nil}))).to eq(xsd)
697
702
  end
698
703
  end
699
704
 
@@ -703,7 +708,7 @@ describe Schematic::Serializers::Xsd do
703
708
  with_model :ModelWithDifferentRoot do
704
709
  model do
705
710
  schematic do
706
- root "my_root"
711
+ root 'my_root'
707
712
  end
708
713
  end
709
714
  end
@@ -711,10 +716,10 @@ describe Schematic::Serializers::Xsd do
711
716
  subject { ModelWithDifferentRoot.to_xsd }
712
717
 
713
718
  it "should use the new root tag name" do
714
- subject.should_not include %{"model-with-different-root"}
715
- subject.should_not include %{"model-with-different-roots"}
716
- subject.should include %{"my-root"}
717
- subject.should include %{"my-roots"}
719
+ expect(subject).not_to include %q{"model-with-different-root"}
720
+ expect(subject).not_to include %q{"model-with-different-roots"}
721
+ expect(subject).to include %q{"my-root"}
722
+ expect(subject).to include %q{"my-roots"}
718
723
  validate_xsd(subject)
719
724
  end
720
725
  end
@@ -724,26 +729,26 @@ describe Schematic::Serializers::Xsd do
724
729
  describe "#nested_attribute_name" do
725
730
  let(:xsd) {Schematic::Generator::Xsd.new(Object)}
726
731
  it "turns 'child' into 'children-attributes'" do
727
- xsd.nested_attribute_name('child').should == "children-attributes"
732
+ expect(xsd.nested_attribute_name('child')).to eq('children-attributes')
728
733
  end
729
734
 
730
735
  it "turns 'children' into 'children-attributes'" do
731
- xsd.nested_attribute_name('children').should == "children-attributes"
736
+ expect(xsd.nested_attribute_name('children')).to eq('children-attributes')
732
737
  end
733
738
 
734
739
  it "turns 'special-children' into 'special-children-attributes'" do
735
- xsd.nested_attribute_name("special_children").should == "special-children-attributes"
740
+ expect(xsd.nested_attribute_name('special_children')).to eq('special-children-attributes')
736
741
  end
737
742
 
738
743
  it "properly converts symbols" do
739
- xsd.nested_attribute_name(:very_special_children).should == "very-special-children-attributes"
744
+ expect(xsd.nested_attribute_name(:very_special_children)).to eq('very-special-children-attributes')
740
745
  end
741
746
  end
742
747
  context "when the model has a nested attribute with a different class name and foreign key than the has_many association" do
743
748
  with_model :foo do
744
749
  model do
745
- has_one :bar, :class_name => "Quz", :foreign_key => "bar_id"
746
- has_many :children, :class_name => "Quz", :foreign_key => "children_id"
750
+ has_one :bar, :class_name => 'Quz', :foreign_key => 'bar_id'
751
+ has_many :children, :class_name => 'Quz', :foreign_key => 'children_id'
747
752
  accepts_nested_attributes_for :children
748
753
  accepts_nested_attributes_for :bar
749
754
  end
@@ -771,11 +776,9 @@ describe Schematic::Serializers::Xsd do
771
776
  </foos>
772
777
  END
773
778
 
774
- subject.should include "Quz"
775
- subject.should include "Quzs"
779
+ expect(subject).to include 'Quz'
780
+ expect(subject).to include 'Quzs'
776
781
  validate_xml_against_xsd(test_xml, subject)
777
782
  end
778
783
  end
779
784
  end
780
-
781
-
data/spec/spec_helper.rb CHANGED
@@ -1,120 +1,15 @@
1
- require "active_record"
2
- require "with_model"
3
- require "nokogiri"
4
- require "schematic"
5
-
6
1
  RSpec.configure do |config|
7
- config.extend WithModel
8
- end
9
-
10
- ActiveRecord::Base.establish_connection(:adapter => 'sqlite3', :database => ":memory:")
11
-
12
- def validate_xml_against_xsd(xml, xsd)
13
- require "tempfile"
14
- tempfile = Tempfile.new("schematic")
15
- tempfile << xsd
16
- tempfile.rewind
17
- xsd = Nokogiri::XML::Schema(tempfile)
18
- doc = Nokogiri::XML.parse(xml)
19
- errors = []
20
- xsd.validate(doc).each do |error|
21
- errors << error.message
2
+ config.expect_with :rspec do |c|
3
+ c.syntax = :expect
22
4
  end
23
- errors.should == []
24
- ensure
25
- tempfile.close
26
- end
27
-
28
- def validate_xsd(xml)
29
- xsd_schema_file = File.join(File.dirname(__FILE__), "xsd", "XMLSchema.xsd")
30
- meta_xsd = Nokogiri::XML::Schema(File.open(xsd_schema_file))
31
5
 
32
- doc = Nokogiri::XML.parse(xml)
33
- meta_xsd.validate(doc).each do |error|
34
- error.message.should be_nil
6
+ config.mock_with :rspec do |c|
7
+ c.syntax = :expect
35
8
  end
36
9
  end
37
10
 
38
- def sanitize_xml(xml)
39
- xml.split("\n").reject(&:blank?).map(&:strip).join("\n")
40
- end
11
+ require 'support/database'
12
+ require 'support/helpers'
13
+ require 'support/with_model'
41
14
 
42
- def generate_xsd_for_model(model, header_element = nil)
43
- xsd_generator = model.schematic_sandbox.xsd_generator
44
- output = <<-XML
45
- <?xml version="1.0" encoding="UTF-8"?>
46
- <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
47
- <xs:complexType name="Integer">
48
- <xs:simpleContent>
49
- <xs:extension base="xs:integer">
50
- <xs:attribute name="type" type="xs:string" use="optional"/>
51
- <xs:attribute name="nil" type="xs:boolean" use="optional"/>
52
- </xs:extension>
53
- </xs:simpleContent>
54
- </xs:complexType>
55
- <xs:complexType name="Float">
56
- <xs:simpleContent>
57
- <xs:extension base="xs:float">
58
- <xs:attribute name="type" type="xs:string" use="optional"/>
59
- <xs:attribute name="nil" type="xs:boolean" use="optional"/>
60
- </xs:extension>
61
- </xs:simpleContent>
62
- </xs:complexType>
63
- <xs:complexType name="String">
64
- <xs:simpleContent>
65
- <xs:extension base="xs:string">
66
- <xs:attribute name="type" type="xs:string" use="optional"/>
67
- <xs:attribute name="nil" type="xs:boolean" use="optional"/>
68
- </xs:extension>
69
- </xs:simpleContent>
70
- </xs:complexType>
71
- <xs:complexType name="Text">
72
- <xs:simpleContent>
73
- <xs:extension base="xs:string">
74
- <xs:attribute name="type" type="xs:string" use="optional"/>
75
- <xs:attribute name="nil" type="xs:boolean" use="optional"/>
76
- </xs:extension>
77
- </xs:simpleContent>
78
- </xs:complexType>
79
- <xs:complexType name="DateTime">
80
- <xs:simpleContent>
81
- <xs:extension base="xs:dateTime">
82
- <xs:attribute name="type" type="xs:string" use="optional"/>
83
- <xs:attribute name="nil" type="xs:boolean" use="optional"/>
84
- </xs:extension>
85
- </xs:simpleContent>
86
- </xs:complexType>
87
- <xs:complexType name="Date">
88
- <xs:simpleContent>
89
- <xs:extension base="xs:date">
90
- <xs:attribute name="type" type="xs:string" use="optional"/>
91
- <xs:attribute name="nil" type="xs:boolean" use="optional"/>
92
- </xs:extension>
93
- </xs:simpleContent>
94
- </xs:complexType>
95
- <xs:complexType name="Boolean">
96
- <xs:simpleContent>
97
- <xs:extension base="xs:boolean">
98
- <xs:attribute name="type" type="xs:string" use="optional"/>
99
- <xs:attribute name="nil" type="xs:boolean" use="optional"/>
100
- </xs:extension>
101
- </xs:simpleContent>
102
- </xs:complexType>
103
- <xs:element name="#{xsd_generator.names.element_collection}" type="#{xsd_generator.names.collection_type}">
104
- #{header_element}
105
- </xs:element>
106
- <xs:complexType name="#{xsd_generator.names.collection_type}">
107
- <xs:sequence>
108
- <xs:element name="#{xsd_generator.names.element}" type="#{xsd_generator.names.type}" minOccurs="0" maxOccurs="unbounded"/>
109
- </xs:sequence>
110
- <xs:attribute name="type" type="xs:string" fixed="array"/>
111
- </xs:complexType>
112
- <xs:complexType name="#{xsd_generator.names.type}">
113
- <xs:all>
114
- #{yield}
115
- </xs:all>
116
- </xs:complexType>
117
- </xs:schema>
118
- XML
119
- sanitize_xml(output)
120
- end
15
+ require 'schematic'