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.
- checksums.yaml +7 -0
- data/.gitignore +14 -8
- data/.travis.yml +17 -0
- data/Gemfile +6 -1
- data/LICENSE +1 -1
- data/README.md +106 -0
- data/Rakefile +3 -8
- data/lib/schematic.rb +3 -42
- data/lib/schematic/exceptions.rb +13 -0
- data/lib/schematic/generator/column.rb +17 -11
- data/lib/schematic/generator/namespaces.rb +3 -3
- data/lib/schematic/generator/restrictions/base.rb +5 -5
- data/lib/schematic/generator/restrictions/custom.rb +3 -2
- data/lib/schematic/generator/restrictions/enumeration.rb +5 -2
- data/lib/schematic/generator/restrictions/length.rb +4 -2
- data/lib/schematic/generator/restrictions/numericality.rb +3 -1
- data/lib/schematic/generator/restrictions/pattern.rb +4 -3
- data/lib/schematic/generator/sandbox.rb +4 -1
- data/lib/schematic/generator/types.rb +14 -13
- data/lib/schematic/generator/uniqueness.rb +7 -8
- data/lib/schematic/generator/xsd.rb +32 -26
- data/lib/schematic/serializers/xsd.rb +6 -6
- data/lib/schematic/version.rb +1 -1
- data/schematic.gemspec +23 -24
- data/spec/schematic/generator/restrictions/custom_spec.rb +15 -18
- data/spec/schematic/generator/restrictions/enumeration_spec.rb +31 -31
- data/spec/schematic/generator/restrictions/length_spec.rb +35 -30
- data/spec/schematic/generator/restrictions/mixin_spec.rb +11 -15
- data/spec/schematic/generator/restrictions/numericality_spec.rb +11 -11
- data/spec/schematic/generator/restrictions/pattern_spec.rb +20 -21
- data/spec/schematic/generator/sandbox_spec.rb +17 -17
- data/spec/schematic/generator/uniqueness_spec.rb +38 -37
- data/spec/schematic/serializers/xsd_extend_spec.rb +11 -11
- data/spec/schematic/serializers/xsd_validation_presence_spec.rb +16 -11
- data/spec/schematic/serializers/xsd_xsd_ignore_methods_spec.rb +3 -3
- data/spec/schematic/serializers/xsd_xsd_methods_spec.rb +27 -24
- data/spec/schematic/serializers/xsd_xsd_minimum_occurrences_for_spec.rb +13 -8
- data/spec/schematic_serializers_xsd_spec.rb +70 -67
- data/spec/spec_helper.rb +8 -113
- data/spec/support/database.rb +9 -0
- data/spec/support/helpers.rb +111 -0
- data/spec/support/with_model.rb +5 -0
- data/spec/{xsd → support/xsd}/XMLSchema.xsd +0 -0
- data/spec/{xsd → support/xsd}/xml.xsd +0 -0
- metadata +54 -69
- data/.rspec +0 -1
- data/.rvmrc +0 -1
- data/README.rdoc +0 -103
- data/spec/support/extensions/active_model/validations/inclusion.rb +0 -69
@@ -1,31 +1,32 @@
|
|
1
|
-
require
|
1
|
+
require 'spec_helper'
|
2
2
|
|
3
|
-
describe Schematic::Generator::Uniqueness do
|
3
|
+
describe "Schematic::Generator::Uniqueness" do
|
4
4
|
describe ".to_xsd" do
|
5
5
|
context "with a model with a uniqueness validation" do
|
6
6
|
subject { sanitize_xml(TestModel.to_xsd) }
|
7
7
|
with_model :test_model do
|
8
8
|
table :id => false do |t|
|
9
|
-
t.string
|
9
|
+
t.string 'some_field'
|
10
10
|
end
|
11
11
|
|
12
12
|
model do
|
13
|
+
self.primary_key = :some_field
|
13
14
|
validates :some_field, :uniqueness => true
|
14
15
|
end
|
15
16
|
end
|
16
17
|
|
17
18
|
it "should validate against it's own XSD" do
|
18
|
-
first_instance = TestModel.new(:some_field =>
|
19
|
-
another_instance = TestModel.new(:some_field =>
|
20
|
-
duplicate_instance = TestModel.new(:some_field =>
|
19
|
+
first_instance = TestModel.new(:some_field => 'first')
|
20
|
+
another_instance = TestModel.new(:some_field => 'second')
|
21
|
+
duplicate_instance = TestModel.new(:some_field => 'first')
|
21
22
|
xml = [first_instance, duplicate_instance, another_instance].to_xml
|
22
|
-
|
23
|
+
expect {
|
23
24
|
validate_xml_against_xsd(xml, subject)
|
24
|
-
}.
|
25
|
+
}.to raise_error
|
25
26
|
xml = [first_instance, another_instance].to_xml
|
26
|
-
|
27
|
+
expect {
|
27
28
|
validate_xml_against_xsd(xml, subject)
|
28
|
-
}.
|
29
|
+
}.not_to raise_error
|
29
30
|
end
|
30
31
|
|
31
32
|
it "should mark that the field with the allowed values" do
|
@@ -48,7 +49,7 @@ describe Schematic::Generator::Uniqueness do
|
|
48
49
|
XML
|
49
50
|
end
|
50
51
|
|
51
|
-
subject.
|
52
|
+
expect(subject).to eq(xsd)
|
52
53
|
end
|
53
54
|
end
|
54
55
|
|
@@ -57,28 +58,29 @@ describe Schematic::Generator::Uniqueness do
|
|
57
58
|
|
58
59
|
shared_examples_for "single field in scope" do
|
59
60
|
it "should validate against it's own XSD" do
|
60
|
-
first_instance = TestModel.new(:some_field =>
|
61
|
-
another_instance = TestModel.new(:some_field =>
|
62
|
-
duplicate_instance = TestModel.new(:some_field =>
|
61
|
+
first_instance = TestModel.new(:some_field => 'first', :other_field => 'unique')
|
62
|
+
another_instance = TestModel.new(:some_field => 'first', :other_field => 'alsounique')
|
63
|
+
duplicate_instance = TestModel.new(:some_field => 'first', :other_field => 'unique')
|
63
64
|
xml = [first_instance, duplicate_instance, another_instance].to_xml
|
64
|
-
|
65
|
+
expect {
|
65
66
|
validate_xml_against_xsd(xml, subject)
|
66
|
-
}.
|
67
|
+
}.to raise_error
|
67
68
|
xml = [first_instance, another_instance].to_xml
|
68
|
-
|
69
|
+
expect {
|
69
70
|
validate_xml_against_xsd(xml, subject)
|
70
|
-
}.
|
71
|
+
}.not_to raise_error
|
71
72
|
end
|
72
73
|
end
|
73
74
|
|
74
75
|
context "when the scope is a symbol" do
|
75
76
|
with_model :test_model do
|
76
77
|
table :id => false do |t|
|
77
|
-
t.string
|
78
|
-
t.string
|
78
|
+
t.string 'some_field'
|
79
|
+
t.string 'other_field'
|
79
80
|
end
|
80
81
|
|
81
82
|
model do
|
83
|
+
self.primary_key = :some_field
|
82
84
|
validates :some_field, :uniqueness => { :scope => :other_field }
|
83
85
|
end
|
84
86
|
end
|
@@ -89,11 +91,12 @@ describe Schematic::Generator::Uniqueness do
|
|
89
91
|
context "when the scope is an array" do
|
90
92
|
with_model :test_model do
|
91
93
|
table :id => false do |t|
|
92
|
-
t.string
|
93
|
-
t.string
|
94
|
+
t.string 'some_field'
|
95
|
+
t.string 'other_field'
|
94
96
|
end
|
95
97
|
|
96
98
|
model do
|
99
|
+
self.primary_key = :some_field
|
97
100
|
validates :some_field, :uniqueness => { :scope => [:other_field] }
|
98
101
|
end
|
99
102
|
end
|
@@ -106,40 +109,38 @@ describe Schematic::Generator::Uniqueness do
|
|
106
109
|
subject { sanitize_xml(TestModel.to_xsd) }
|
107
110
|
with_model :test_model do
|
108
111
|
table :id => false do |t|
|
109
|
-
t.string
|
110
|
-
t.string
|
112
|
+
t.string 'some_field'
|
113
|
+
t.string 'other_field'
|
111
114
|
end
|
112
115
|
|
113
116
|
model do
|
117
|
+
self.primary_key = :some_field
|
114
118
|
validates :some_field, :uniqueness => true
|
115
119
|
validates :other_field, :uniqueness => true
|
116
120
|
end
|
117
121
|
end
|
118
122
|
|
119
123
|
it "should validate against it's own XSD" do
|
120
|
-
first_instance = TestModel.new(:some_field =>
|
121
|
-
another_instance = TestModel.new(:some_field =>
|
122
|
-
duplicate_instance = TestModel.new(:some_field =>
|
123
|
-
other_duplicate_instance = TestModel.new(:some_field =>
|
124
|
+
first_instance = TestModel.new(:some_field => 'first', :other_field => 'unique')
|
125
|
+
another_instance = TestModel.new(:some_field => 'another', :other_field => 'alsounique')
|
126
|
+
duplicate_instance = TestModel.new(:some_field => 'first', :other_field => 'duplicate')
|
127
|
+
other_duplicate_instance = TestModel.new(:some_field => 'fourth', :other_field => 'unique')
|
124
128
|
|
125
129
|
xml = [first_instance, duplicate_instance, another_instance].to_xml
|
126
|
-
|
130
|
+
expect {
|
127
131
|
validate_xml_against_xsd(xml, subject)
|
128
|
-
}.
|
132
|
+
}.to raise_error
|
129
133
|
|
130
134
|
xml = [first_instance, other_duplicate_instance, another_instance].to_xml
|
131
|
-
|
135
|
+
expect {
|
132
136
|
validate_xml_against_xsd(xml, subject)
|
133
|
-
}.
|
137
|
+
}.to raise_error
|
134
138
|
|
135
139
|
xml = [first_instance, another_instance].to_xml
|
136
|
-
|
140
|
+
expect {
|
137
141
|
validate_xml_against_xsd(xml, subject)
|
138
|
-
}.
|
142
|
+
}.not_to raise_error
|
139
143
|
end
|
140
144
|
end
|
141
|
-
|
142
145
|
end
|
143
146
|
end
|
144
|
-
|
145
|
-
|
@@ -1,8 +1,8 @@
|
|
1
|
-
require
|
1
|
+
require 'spec_helper'
|
2
2
|
|
3
3
|
describe Schematic::Serializers::Xsd do
|
4
|
-
with_model :empty_model
|
5
|
-
|
4
|
+
with_model :empty_model
|
5
|
+
|
6
6
|
before do
|
7
7
|
class EmptyClass
|
8
8
|
include ActiveModel::Serializers::Xml
|
@@ -14,11 +14,11 @@ describe Schematic::Serializers::Xsd do
|
|
14
14
|
subject { EmptyModel }
|
15
15
|
|
16
16
|
it "should allow the model to be extended" do
|
17
|
-
|
17
|
+
expect {
|
18
18
|
subject.class_eval do
|
19
19
|
extend Schematic::Serializers::Xsd
|
20
20
|
end
|
21
|
-
}.
|
21
|
+
}.not_to raise_error
|
22
22
|
end
|
23
23
|
end
|
24
24
|
|
@@ -26,11 +26,11 @@ describe Schematic::Serializers::Xsd do
|
|
26
26
|
subject { EmptyClass }
|
27
27
|
|
28
28
|
it "should raise an exception" do
|
29
|
-
|
29
|
+
expect {
|
30
30
|
subject.class_eval do
|
31
31
|
extend Schematic::Serializers::Xsd
|
32
32
|
end
|
33
|
-
}.
|
33
|
+
}.to raise_error(Schematic::ClassMissingAttributes)
|
34
34
|
end
|
35
35
|
|
36
36
|
context "and it implements #attributes" do
|
@@ -42,11 +42,11 @@ describe Schematic::Serializers::Xsd do
|
|
42
42
|
end
|
43
43
|
end
|
44
44
|
it "should allow the model to be extended" do
|
45
|
-
|
45
|
+
expect {
|
46
46
|
subject.class_eval do
|
47
47
|
extend Schematic::Serializers::Xsd
|
48
48
|
end
|
49
|
-
}.
|
49
|
+
}.not_to raise_error
|
50
50
|
end
|
51
51
|
end
|
52
52
|
end
|
@@ -55,11 +55,11 @@ describe Schematic::Serializers::Xsd do
|
|
55
55
|
subject { Object }
|
56
56
|
|
57
57
|
it "should raise an exception" do
|
58
|
-
|
58
|
+
expect {
|
59
59
|
subject.class_eval do
|
60
60
|
extend Schematic::Serializers::Xsd
|
61
61
|
end
|
62
|
-
}.
|
62
|
+
}.to raise_error(Schematic::ClassMissingXmlSerializer)
|
63
63
|
end
|
64
64
|
end
|
65
65
|
end
|
@@ -1,4 +1,4 @@
|
|
1
|
-
require
|
1
|
+
require 'spec_helper'
|
2
2
|
|
3
3
|
describe Schematic::Serializers::Xsd do
|
4
4
|
describe ".to_xsd" do
|
@@ -7,10 +7,11 @@ describe Schematic::Serializers::Xsd do
|
|
7
7
|
context "when allow blank is true" do
|
8
8
|
with_model :some_model do
|
9
9
|
table :id => false do |t|
|
10
|
-
t.string
|
10
|
+
t.string 'title'
|
11
11
|
end
|
12
12
|
|
13
13
|
model do
|
14
|
+
self.primary_key = :title
|
14
15
|
validate :title, :presence => true, :allow_blank => true
|
15
16
|
end
|
16
17
|
end
|
@@ -29,17 +30,18 @@ describe Schematic::Serializers::Xsd do
|
|
29
30
|
XML
|
30
31
|
end
|
31
32
|
|
32
|
-
subject.
|
33
|
+
expect(subject).to eq(xsd)
|
33
34
|
end
|
34
35
|
end
|
35
36
|
|
36
37
|
context "when allow blank is false" do
|
37
38
|
with_model :some_model do
|
38
39
|
table :id => false do |t|
|
39
|
-
t.string
|
40
|
+
t.string 'title'
|
40
41
|
end
|
41
42
|
|
42
43
|
model do
|
44
|
+
self.primary_key = :title
|
43
45
|
validates :title, :presence => true
|
44
46
|
end
|
45
47
|
end
|
@@ -58,18 +60,19 @@ describe Schematic::Serializers::Xsd do
|
|
58
60
|
XML
|
59
61
|
end
|
60
62
|
|
61
|
-
subject.
|
63
|
+
expect(subject).to eq(xsd)
|
62
64
|
end
|
63
65
|
end
|
64
66
|
|
65
67
|
context "when there is a condition" do
|
66
68
|
with_model :some_model do
|
67
69
|
table :id => false do |t|
|
68
|
-
t.string
|
69
|
-
t.string
|
70
|
+
t.string 'title'
|
71
|
+
t.string 'description'
|
70
72
|
end
|
71
73
|
|
72
74
|
model do
|
75
|
+
self.primary_key = :title
|
73
76
|
validates :title, :presence => true, :if => lambda { |model| false }
|
74
77
|
validates :description, :presence => true, :unless => lambda { |model| true }
|
75
78
|
end
|
@@ -97,7 +100,7 @@ describe Schematic::Serializers::Xsd do
|
|
97
100
|
XML
|
98
101
|
end
|
99
102
|
|
100
|
-
subject.
|
103
|
+
expect(subject).to eq(xsd)
|
101
104
|
end
|
102
105
|
end
|
103
106
|
end
|
@@ -107,10 +110,11 @@ describe Schematic::Serializers::Xsd do
|
|
107
110
|
context "when allow blank is true" do
|
108
111
|
with_model :some_model do
|
109
112
|
table :id => false do |t|
|
110
|
-
t.boolean
|
113
|
+
t.boolean 'current'
|
111
114
|
end
|
112
115
|
|
113
116
|
model do
|
117
|
+
self.primary_key = :current
|
114
118
|
schematic do
|
115
119
|
required :current
|
116
120
|
end
|
@@ -131,7 +135,7 @@ describe Schematic::Serializers::Xsd do
|
|
131
135
|
XML
|
132
136
|
end
|
133
137
|
|
134
|
-
subject.
|
138
|
+
expect(subject).to eq(xsd)
|
135
139
|
end
|
136
140
|
end
|
137
141
|
end
|
@@ -145,6 +149,7 @@ describe Schematic::Serializers::Xsd do
|
|
145
149
|
end
|
146
150
|
|
147
151
|
model do
|
152
|
+
self.primary_key = :some_field
|
148
153
|
validates_presence_of :some_field
|
149
154
|
|
150
155
|
schematic do
|
@@ -167,7 +172,7 @@ describe Schematic::Serializers::Xsd do
|
|
167
172
|
XML
|
168
173
|
end
|
169
174
|
|
170
|
-
subject.
|
175
|
+
expect(subject).to eq(xsd)
|
171
176
|
end
|
172
177
|
end
|
173
178
|
end
|
@@ -1,4 +1,4 @@
|
|
1
|
-
require
|
1
|
+
require 'spec_helper'
|
2
2
|
|
3
3
|
describe Schematic::Serializers::Xsd do
|
4
4
|
describe "schematic#ignore keyword" do
|
@@ -8,6 +8,7 @@ describe Schematic::Serializers::Xsd do
|
|
8
8
|
end
|
9
9
|
|
10
10
|
model do
|
11
|
+
self.primary_key = :title
|
11
12
|
schematic do
|
12
13
|
ignore :title
|
13
14
|
end
|
@@ -18,8 +19,7 @@ describe Schematic::Serializers::Xsd do
|
|
18
19
|
xsd = generate_xsd_for_model(SomeModel) do
|
19
20
|
end
|
20
21
|
|
21
|
-
sanitize_xml(SomeModel.to_xsd).
|
22
|
+
expect(sanitize_xml(SomeModel.to_xsd)).to eq(xsd)
|
22
23
|
end
|
23
24
|
end
|
24
|
-
|
25
25
|
end
|
@@ -1,4 +1,4 @@
|
|
1
|
-
require
|
1
|
+
require 'spec_helper'
|
2
2
|
|
3
3
|
describe Schematic::Serializers::Xsd do
|
4
4
|
describe "Adding additional methods" do
|
@@ -33,7 +33,7 @@ describe Schematic::Serializers::Xsd do
|
|
33
33
|
XML
|
34
34
|
end
|
35
35
|
|
36
|
-
sanitize_xml(SomeModel.to_xsd).
|
36
|
+
expect(sanitize_xml(SomeModel.to_xsd)).to eq(xsd)
|
37
37
|
end
|
38
38
|
end
|
39
39
|
|
@@ -44,6 +44,7 @@ describe Schematic::Serializers::Xsd do
|
|
44
44
|
end
|
45
45
|
|
46
46
|
model do
|
47
|
+
self.primary_key = :foo
|
47
48
|
validates :foo_bar, :inclusion => { :in => [1,2,3] }
|
48
49
|
|
49
50
|
def foo_bar=(value)
|
@@ -90,7 +91,7 @@ describe Schematic::Serializers::Xsd do
|
|
90
91
|
XML
|
91
92
|
end
|
92
93
|
|
93
|
-
sanitize_xml(SomeModel.to_xsd).
|
94
|
+
expect(sanitize_xml(SomeModel.to_xsd)).to eq(xsd)
|
94
95
|
end
|
95
96
|
|
96
97
|
it "should validate against the xsd" do
|
@@ -98,14 +99,14 @@ describe Schematic::Serializers::Xsd do
|
|
98
99
|
|
99
100
|
invalid_instance = SomeModel.new(:foo_bar => "d")
|
100
101
|
xml = [invalid_instance].to_xml
|
101
|
-
|
102
|
+
expect {
|
102
103
|
validate_xml_against_xsd(xml, xsd)
|
103
|
-
}.
|
104
|
+
}.to raise_error
|
104
105
|
valid_instance = SomeModel.new(:foo_bar => 1)
|
105
106
|
xml = [valid_instance].to_xml
|
106
|
-
|
107
|
+
expect {
|
107
108
|
validate_xml_against_xsd(xml, xsd)
|
108
|
-
}.
|
109
|
+
}.not_to raise_error
|
109
110
|
end
|
110
111
|
end
|
111
112
|
|
@@ -116,6 +117,7 @@ describe Schematic::Serializers::Xsd do
|
|
116
117
|
end
|
117
118
|
|
118
119
|
model do
|
120
|
+
self.primary_key = :foo
|
119
121
|
|
120
122
|
attr_accessor :bar
|
121
123
|
|
@@ -157,22 +159,22 @@ describe Schematic::Serializers::Xsd do
|
|
157
159
|
</xs:element>
|
158
160
|
XML
|
159
161
|
end
|
160
|
-
sanitize_xml(SomeModel.to_xsd).
|
162
|
+
expect(sanitize_xml(SomeModel.to_xsd)).to eq(xsd)
|
161
163
|
end
|
162
164
|
|
163
165
|
it "should validate against the xsd" do
|
164
166
|
xsd = SomeModel.to_xsd
|
165
167
|
|
166
|
-
invalid_instance = SomeModel.new(:bar =>
|
168
|
+
invalid_instance = SomeModel.new(:bar => 'invalid option')
|
167
169
|
xml = [invalid_instance].to_xml
|
168
|
-
|
170
|
+
expect {
|
169
171
|
validate_xml_against_xsd(xml, xsd)
|
170
|
-
}.
|
171
|
-
valid_instance = SomeModel.new(:bar =>
|
172
|
+
}.to raise_error
|
173
|
+
valid_instance = SomeModel.new(:bar => 'b')
|
172
174
|
xml = [valid_instance].to_xml
|
173
|
-
|
175
|
+
expect {
|
174
176
|
validate_xml_against_xsd(xml, xsd)
|
175
|
-
}.
|
177
|
+
}.not_to raise_error
|
176
178
|
end
|
177
179
|
end
|
178
180
|
|
@@ -183,6 +185,8 @@ describe Schematic::Serializers::Xsd do
|
|
183
185
|
end
|
184
186
|
|
185
187
|
model do
|
188
|
+
self.primary_key = :bar
|
189
|
+
|
186
190
|
def foo=(value)
|
187
191
|
@foo = value
|
188
192
|
end
|
@@ -192,7 +196,7 @@ describe Schematic::Serializers::Xsd do
|
|
192
196
|
end
|
193
197
|
|
194
198
|
def self.xsd_foo_enumeration_restrictions
|
195
|
-
[
|
199
|
+
['1', '2', '3']
|
196
200
|
end
|
197
201
|
|
198
202
|
schematic do
|
@@ -236,21 +240,21 @@ describe Schematic::Serializers::Xsd do
|
|
236
240
|
</xs:element>
|
237
241
|
XML
|
238
242
|
end
|
239
|
-
sanitize_xml(SomeModel.to_xsd).
|
243
|
+
expect(sanitize_xml(SomeModel.to_xsd)).to eq(xsd)
|
240
244
|
end
|
241
245
|
|
242
246
|
it "should validate against its own XSD" do
|
243
|
-
invalid_instance = SomeModel.new(:foo => [
|
247
|
+
invalid_instance = SomeModel.new(:foo => ['a', 'b'])
|
244
248
|
xml = [invalid_instance].to_xml
|
245
|
-
|
249
|
+
expect {
|
246
250
|
validate_xml_against_xsd(xml, SomeModel.to_xsd)
|
247
|
-
}.
|
251
|
+
}.to raise_error
|
248
252
|
|
249
|
-
instance = SomeModel.new(:foo => [
|
253
|
+
instance = SomeModel.new(:foo => ['1', '2'])
|
250
254
|
xml = [instance].to_xml
|
251
|
-
|
255
|
+
expect {
|
252
256
|
validate_xml_against_xsd(xml, SomeModel.to_xsd)
|
253
|
-
}.
|
257
|
+
}.not_to raise_error
|
254
258
|
end
|
255
259
|
end
|
256
260
|
|
@@ -308,9 +312,8 @@ describe Schematic::Serializers::Xsd do
|
|
308
312
|
XML
|
309
313
|
end
|
310
314
|
|
311
|
-
sanitize_xml(SomeModel.to_xsd).
|
315
|
+
expect(sanitize_xml(SomeModel.to_xsd)).to eq(xsd)
|
312
316
|
end
|
313
317
|
end
|
314
318
|
end
|
315
319
|
end
|
316
|
-
|