schematic 0.1.6 → 0.1.7

Sign up to get free protection for your applications and to get access to all the features.
data/.gitignore CHANGED
@@ -1,3 +1,4 @@
1
+ .pairs
1
2
  *.gem
2
3
  *~
3
4
  .DS_Store
@@ -91,7 +91,9 @@ module Schematic
91
91
  end
92
92
  end
93
93
  else
94
- builder.xs :element, "name" => method_xsd_name, "minOccurs" => "0", "maxOccurs" => "1"
94
+ column_klass = Struct.new(:name, :type)
95
+ column = column_klass.new(method_name.to_s, :string)
96
+ Column.new(@klass, column, {}, @klass.xsd_ignore_methods).generate(builder)
95
97
  end
96
98
  end
97
99
  end
@@ -1,3 +1,3 @@
1
1
  module Schematic
2
- VERSION = "0.1.6"
2
+ VERSION = "0.1.7"
3
3
  end
@@ -24,12 +24,89 @@ describe Schematic::Serializers::Xsd do
24
24
  </xs:simpleContent>
25
25
  </xs:complexType>
26
26
  </xs:element>
27
- <xs:element name="foo-bar" minOccurs="0" maxOccurs="1"/>
27
+ <xs:element name="foo-bar" minOccurs="0" maxOccurs="1">
28
+ <xs:complexType>
29
+ <xs:simpleContent>
30
+ <xs:restriction base="String">
31
+ </xs:restriction>
32
+ </xs:simpleContent>
33
+ </xs:complexType>
34
+ </xs:element>
35
+ XML
36
+ end
37
+
38
+ sanitize_xml(SomeModel.to_xsd).should eq(xsd)
39
+ end
40
+ end
41
+
42
+ context "given a method with validations" do
43
+ with_model :some_model do
44
+ table {}
45
+
46
+ model do
47
+ validates :foo_bar, :inclusion => { :in => [1,2,3] }
48
+
49
+ def foo_bar=(value)
50
+ @foo_bar = value
51
+ end
52
+
53
+ def foo_bar
54
+ @foo_bar
55
+ end
56
+
57
+ def to_xml(options = {})
58
+ super({:methods => [:foo_bar]}.merge(options))
59
+ end
60
+
61
+ def self.xsd_methods
62
+ {:foo_bar => nil}
63
+ end
64
+ end
65
+ end
66
+
67
+
68
+ it "should generate validation restrictions for the method if there are any" do
69
+ xsd = generate_xsd_for_model(SomeModel) do
70
+ <<-XML
71
+ <xs:element name="id" minOccurs="0" maxOccurs="1">
72
+ <xs:complexType>
73
+ <xs:simpleContent>
74
+ <xs:restriction base="Integer">
75
+ </xs:restriction>
76
+ </xs:simpleContent>
77
+ </xs:complexType>
78
+ </xs:element>
79
+ <xs:element name="foo-bar" minOccurs="0" maxOccurs="1">
80
+ <xs:complexType>
81
+ <xs:simpleContent>
82
+ <xs:restriction base="String">
83
+ <xs:enumeration value="1"/>
84
+ <xs:enumeration value="2"/>
85
+ <xs:enumeration value="3"/>
86
+ </xs:restriction>
87
+ </xs:simpleContent>
88
+ </xs:complexType>
89
+ </xs:element>
28
90
  XML
29
91
  end
30
92
 
31
93
  sanitize_xml(SomeModel.to_xsd).should eq(xsd)
32
94
  end
95
+
96
+ it "should validate against the xsd" do
97
+ xsd = SomeModel.to_xsd
98
+
99
+ invalid_instance = SomeModel.new(:foo_bar => "d")
100
+ xml = [invalid_instance].to_xml
101
+ lambda {
102
+ validate_xml_against_xsd(xml, xsd)
103
+ }.should raise_error
104
+ valid_instance = SomeModel.new(:foo_bar => 1)
105
+ xml = [valid_instance].to_xml
106
+ lambda {
107
+ validate_xml_against_xsd(xml, xsd)
108
+ }.should_not raise_error
109
+ end
33
110
  end
34
111
 
35
112
  context "given a an array of methods" do
@@ -96,7 +173,14 @@ describe Schematic::Serializers::Xsd do
96
173
  <xs:element name="bar" minOccurs="0" maxOccurs="1">
97
174
  <xs:complexType>
98
175
  <xs:all>
99
- <xs:element name="baz" minOccurs="0" maxOccurs="1"/>
176
+ <xs:element name="baz" minOccurs="0" maxOccurs="1">
177
+ <xs:complexType>
178
+ <xs:simpleContent>
179
+ <xs:restriction base="String">
180
+ </xs:restriction>
181
+ </xs:simpleContent>
182
+ </xs:complexType>
183
+ </xs:element>
100
184
  </xs:all>
101
185
  <xs:attribute name="type" type="xs:string" fixed="array" use="optional"/>
102
186
  </xs:complexType>
@@ -266,7 +266,14 @@ describe Schematic::Serializers::Xsd do
266
266
  </xs:simpleContent>
267
267
  </xs:complexType>
268
268
  </xs:element>
269
- <xs:element name="foo-bar" minOccurs="0" maxOccurs="1"/>
269
+ <xs:element name="foo-bar" minOccurs="0" maxOccurs="1">
270
+ <xs:complexType>
271
+ <xs:simpleContent>
272
+ <xs:restriction base="String">
273
+ </xs:restriction>
274
+ </xs:simpleContent>
275
+ </xs:complexType>
276
+ </xs:element>
270
277
  XML
271
278
  end
272
279
 
metadata CHANGED
@@ -2,7 +2,7 @@
2
2
  name: schematic
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease:
5
- version: 0.1.6
5
+ version: 0.1.7
6
6
  platform: ruby
7
7
  authors:
8
8
  - Case Commons, LLC
@@ -10,7 +10,7 @@ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
12
 
13
- date: 2011-05-13 00:00:00 Z
13
+ date: 2011-05-16 00:00:00 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: activerecord