schematic 0.6.2 → 0.7.0

Sign up to get free protection for your applications and to get access to all the features.
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,30 +1,31 @@
1
- require "spec_helper"
1
+ require 'spec_helper'
2
2
 
3
- describe Schematic::Generator::Restrictions::Length do
3
+ describe "Schematic::Generator::Restrictions::Length" do
4
4
  describe ".to_xsd" do
5
5
  context "with a model with range length validations" do
6
6
  subject { sanitize_xml(LengthModelRange.to_xsd) }
7
7
  with_model :length_model_range do
8
8
  table :id => false do |t|
9
- t.string "title"
9
+ t.string 'title'
10
10
  end
11
11
 
12
12
  model do
13
+ self.primary_key = :title
13
14
  validates :title, :length => { :within => 10..20 }
14
15
  end
15
16
  end
16
17
 
17
18
  it "should validate against it's own XSD" do
18
- invalid_instance = LengthModelRange.new(:title => "A" * 9)
19
+ invalid_instance = LengthModelRange.new(:title => 'A' * 9)
19
20
  xml = [invalid_instance].to_xml
20
- lambda {
21
+ expect {
21
22
  validate_xml_against_xsd(xml, subject)
22
- }.should raise_error
23
- invalid_instance = LengthModelRange.new(:title => "A" * 21)
23
+ }.to raise_error
24
+ invalid_instance = LengthModelRange.new(:title => 'A' * 21)
24
25
  xml = [invalid_instance].to_xml
25
- lambda {
26
+ expect {
26
27
  validate_xml_against_xsd(xml, subject)
27
- }.should raise_error
28
+ }.to raise_error
28
29
  end
29
30
  end
30
31
 
@@ -36,21 +37,22 @@ describe Schematic::Generator::Restrictions::Length do
36
37
  end
37
38
 
38
39
  model do
40
+ self.primary_key = :title
39
41
  validates :title, :length => { :in => 10..20 }
40
42
  end
41
43
  end
42
44
 
43
45
  it "should validate against it's own XSD" do
44
- invalid_instance = LengthModelRange.new(:title => "A" * 9)
46
+ invalid_instance = LengthModelRange.new(:title => 'A' * 9)
45
47
  xml = [invalid_instance].to_xml
46
- lambda {
48
+ expect {
47
49
  validate_xml_against_xsd(xml, subject)
48
- }.should raise_error
49
- invalid_instance = LengthModelRange.new(:title => "A" * 21)
50
+ }.to raise_error
51
+ invalid_instance = LengthModelRange.new(:title => 'A' * 21)
50
52
  xml = [invalid_instance].to_xml
51
- lambda {
53
+ expect {
52
54
  validate_xml_against_xsd(xml, subject)
53
- }.should raise_error
55
+ }.to raise_error
54
56
  end
55
57
  end
56
58
 
@@ -58,20 +60,21 @@ describe Schematic::Generator::Restrictions::Length do
58
60
  subject { sanitize_xml(LengthModelMinimum.to_xsd) }
59
61
  with_model :length_model_minimum do
60
62
  table :id => false do |t|
61
- t.string "title"
63
+ t.string 'title'
62
64
  end
63
65
 
64
66
  model do
67
+ self.primary_key = :title
65
68
  validates :title, :length => { :minimum => 10 }
66
69
  end
67
70
  end
68
71
 
69
72
  it "should validate against it's own XSD" do
70
- invalid_instance = LengthModelMinimum.new(:title => "A" * 9)
73
+ invalid_instance = LengthModelMinimum.new(:title => 'A' * 9)
71
74
  xml = [invalid_instance].to_xml
72
- lambda {
75
+ expect {
73
76
  validate_xml_against_xsd(xml, subject)
74
- }.should raise_error
77
+ }.to raise_error
75
78
  end
76
79
  end
77
80
 
@@ -80,20 +83,21 @@ describe Schematic::Generator::Restrictions::Length do
80
83
  context "when allow blank is true" do
81
84
  with_model :length_model_one do
82
85
  table :id => false do |t|
83
- t.string "title"
86
+ t.string 'title'
84
87
  end
85
88
 
86
89
  model do
90
+ self.primary_key = :title
87
91
  validates :title, :length => { :maximum => 100 }, :allow_blank => true
88
92
  end
89
93
  end
90
94
 
91
95
  it "should validate against it's own XSD" do
92
- invalid_instance = LengthModelOne.new(:title => "A" * 201)
96
+ invalid_instance = LengthModelOne.new(:title => 'A' * 201)
93
97
  xml = [invalid_instance].to_xml
94
- lambda {
98
+ expect {
95
99
  validate_xml_against_xsd(xml, subject)
96
- }.should raise_error
100
+ }.to raise_error
97
101
  end
98
102
 
99
103
  it "should mark that the field minimum occurrences is 0 but still list the length" do
@@ -111,7 +115,7 @@ describe Schematic::Generator::Restrictions::Length do
111
115
  XML
112
116
  end
113
117
 
114
- subject.should == xsd
118
+ expect(subject).to eq(xsd)
115
119
  end
116
120
  end
117
121
 
@@ -119,11 +123,12 @@ describe Schematic::Generator::Restrictions::Length do
119
123
  subject { sanitize_xml(LengthModelTwo.to_xsd) }
120
124
  with_model :length_model_two do
121
125
  table :id => false do |t|
122
- t.string "title"
126
+ t.string 'title'
123
127
  end
124
128
 
125
129
  model do
126
- validates :title, :length => { :maximum => 100 }, :allow_blank => false
130
+ self.primary_key = :title
131
+ validates :title, :length => { :maximum => 100 }
127
132
  end
128
133
  end
129
134
 
@@ -142,7 +147,7 @@ describe Schematic::Generator::Restrictions::Length do
142
147
  XML
143
148
  end
144
149
 
145
- subject.should == xsd
150
+ expect(subject).to eq(xsd)
146
151
  end
147
152
  end
148
153
 
@@ -150,10 +155,11 @@ describe Schematic::Generator::Restrictions::Length do
150
155
  subject { sanitize_xml(LengthModelThree.to_xsd) }
151
156
  with_model :length_model_three do
152
157
  table :id => false do |t|
153
- t.string "title"
158
+ t.string 'title'
154
159
  end
155
160
 
156
161
  model do
162
+ self.primary_key = :title
157
163
  validates :title, :length => { :maximum => 100 }, :if => lambda { |model| false }
158
164
  end
159
165
  end
@@ -172,10 +178,9 @@ describe Schematic::Generator::Restrictions::Length do
172
178
  XML
173
179
  end
174
180
 
175
- subject.should == xsd
181
+ expect(subject).to eq(xsd)
176
182
  end
177
183
  end
178
184
  end
179
185
  end
180
186
  end
181
-
@@ -1,4 +1,4 @@
1
- require "spec_helper"
1
+ require 'spec_helper'
2
2
 
3
3
  describe "Schematic::Generator::Restrictions::Mixin" do
4
4
  describe ".to_xsd" do
@@ -7,7 +7,7 @@ describe "Schematic::Generator::Restrictions::Mixin" do
7
7
  class MixedInRestriction < Schematic::Generator::Restrictions::Base
8
8
  def generate(builder)
9
9
  for_validator ActiveModel::BlockValidator do |validator|
10
- builder.xs(:enumeration, "value" => "cheese")
10
+ builder.xs(:enumeration, 'value' => 'cheese')
11
11
  end
12
12
  end
13
13
  end
@@ -16,26 +16,27 @@ describe "Schematic::Generator::Restrictions::Mixin" do
16
16
  subject { sanitize_xml(TestModel.to_xsd) }
17
17
  with_model :test_model do
18
18
  table :id => false do |t|
19
- t.string "title"
19
+ t.string 'title'
20
20
  end
21
21
 
22
22
  model do
23
+ self.primary_key = :title
23
24
  validates_each :title do |object, attr, value|
24
25
  end
25
26
  end
26
27
  end
27
28
 
28
29
  it "should validate against it's own XSD" do
29
- invalid_instance = TestModel.new(:title => "cake")
30
+ invalid_instance = TestModel.new(:title => 'cake')
30
31
  xml = [invalid_instance].to_xml
31
- lambda {
32
+ expect {
32
33
  validate_xml_against_xsd(xml, subject)
33
- }.should raise_error
34
- valid_instance = TestModel.new(:title => "cheese")
34
+ }.to raise_error
35
+ valid_instance = TestModel.new(:title => 'cheese')
35
36
  xml = [valid_instance].to_xml
36
- lambda {
37
+ expect {
37
38
  validate_xml_against_xsd(xml, subject)
38
- }.should_not raise_error
39
+ }.not_to raise_error
39
40
  end
40
41
 
41
42
  it "should mark that the field with the allowed values" do
@@ -53,13 +54,8 @@ describe "Schematic::Generator::Restrictions::Mixin" do
53
54
  XML
54
55
  end
55
56
 
56
- subject.should == xsd
57
+ expect(subject).to eq(xsd)
57
58
  end
58
59
  end
59
60
  end
60
61
  end
61
-
62
-
63
-
64
-
65
-
@@ -1,30 +1,31 @@
1
- require "spec_helper"
1
+ require 'spec_helper'
2
2
 
3
- describe Schematic::Generator::Restrictions::Numericality do
3
+ describe "Schematic::Generator::Restrictions::Numericality" do
4
4
  describe ".to_xsd" do
5
5
  context "with a model with numericality validations" 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 "some_field"
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, :numericality => true
14
15
  end
15
16
  end
16
17
 
17
18
  it "should validate against it's own XSD" do
18
- invalid_instance = TestModel.new(:some_field => "1a2")
19
+ invalid_instance = TestModel.new(:some_field => '1a2')
19
20
  xml = [invalid_instance].to_xml
20
- lambda {
21
+ expect {
21
22
  validate_xml_against_xsd(xml, subject)
22
- }.should raise_error
23
- valid_instance = TestModel.new(:some_field => "123")
23
+ }.to raise_error
24
+ valid_instance = TestModel.new(:some_field => '123')
24
25
  xml = [valid_instance].to_xml
25
- lambda {
26
+ expect {
26
27
  validate_xml_against_xsd(xml, subject)
27
- }.should_not raise_error
28
+ }.not_to raise_error
28
29
  end
29
30
 
30
31
  it "should mark that the field with the allowed values" do
@@ -42,9 +43,8 @@ describe Schematic::Generator::Restrictions::Numericality do
42
43
  XML
43
44
  end
44
45
 
45
- subject.should == xsd
46
+ expect(subject).to eq(xsd)
46
47
  end
47
48
  end
48
49
  end
49
50
  end
50
-
@@ -1,6 +1,6 @@
1
- require "spec_helper"
1
+ require 'spec_helper'
2
2
 
3
- describe Schematic::Generator::Restrictions::Pattern do
3
+ describe "Schematic::Generator::Restrictions::Pattern" do
4
4
  describe ".to_xsd" do
5
5
  context "with a model with format validations" do
6
6
  subject { sanitize_xml(PatternModel.to_xsd) }
@@ -10,21 +10,22 @@ describe Schematic::Generator::Restrictions::Pattern do
10
10
  end
11
11
 
12
12
  model do
13
+ self.primary_key = :title
13
14
  validates :title, :format => { :with => /[a-z]#[0-9]/ }
14
15
  end
15
16
  end
16
17
 
17
18
  it "should validate against it's own XSD" do
18
- invalid_instance = PatternModel.new(:title => "1-2")
19
+ invalid_instance = PatternModel.new(:title => '1-2')
19
20
  xml = [invalid_instance].to_xml
20
- lambda {
21
+ expect {
21
22
  validate_xml_against_xsd(xml, subject)
22
- }.should raise_error
23
- valid_instance = PatternModel.new(:title => "a#5")
23
+ }.to raise_error
24
+ valid_instance = PatternModel.new(:title => 'a#5')
24
25
  xml = [valid_instance].to_xml
25
- lambda {
26
+ expect {
26
27
  validate_xml_against_xsd(xml, subject)
27
- }.should_not raise_error
28
+ }.not_to raise_error
28
29
  end
29
30
 
30
31
  it "should mark that the field with the allowed values" do
@@ -42,7 +43,7 @@ describe Schematic::Generator::Restrictions::Pattern do
42
43
  XML
43
44
  end
44
45
 
45
- subject.should == xsd
46
+ expect(subject).to eq(xsd)
46
47
  end
47
48
  end
48
49
 
@@ -55,31 +56,29 @@ describe Schematic::Generator::Restrictions::Pattern do
55
56
  end
56
57
 
57
58
  model do
59
+ self.primary_key = :email
58
60
  validates :email, :format => { :with => /\A([\w\.%\+\-`']+)@([\w\-]+\.)+([\w]{2,})\Z/ }
59
61
  validates :money, :format => { :with => /\$?[,0-9]+(?:\.\d+)?/ }
60
62
  end
61
63
  end
62
64
 
63
65
  it "should validate against it's own XSD" do
64
- invalid_instance = PatternModel.new(:email => "@blah")
66
+ invalid_instance = PatternModel.new(:email => '@blah')
65
67
  xml = [invalid_instance].to_xml
66
- lambda {
68
+ expect {
67
69
  validate_xml_against_xsd(xml, subject)
68
- }.should raise_error
69
- invalid_instance = PatternModel.new(:money => "whatever")
70
+ }.to raise_error
71
+ invalid_instance = PatternModel.new(:money => 'whatever')
70
72
  xml = [invalid_instance].to_xml
71
- lambda {
73
+ expect {
72
74
  validate_xml_against_xsd(xml, subject)
73
- }.should raise_error
74
- valid_instance = PatternModel.new(:email => "foo@bar.com", :money => "$99.95")
75
+ }.to raise_error
76
+ valid_instance = PatternModel.new(:email => 'foo@bar.com', :money => '$99.95')
75
77
  xml = [valid_instance].to_xml
76
- lambda {
78
+ expect {
77
79
  validate_xml_against_xsd(xml, subject)
78
- }.should_not raise_error
80
+ }.not_to raise_error
79
81
  end
80
82
  end
81
83
  end
82
84
  end
83
-
84
-
85
-
@@ -1,4 +1,4 @@
1
- require "spec_helper"
1
+ require 'spec_helper'
2
2
 
3
3
  describe Schematic::Generator::Sandbox do
4
4
  subject { Schematic::Generator::Sandbox.new(klass) }
@@ -10,15 +10,15 @@ describe Schematic::Generator::Sandbox do
10
10
  subject.run do
11
11
  ignore :foo
12
12
  end
13
- subject.ignored_elements.should include(:foo)
13
+ expect(subject.ignored_elements).to include(:foo)
14
14
  end
15
15
 
16
16
  it "accepts multiple fields" do
17
17
  subject.run do
18
18
  ignore :foo, :bar
19
19
  end
20
- subject.ignored_elements.should include(:foo)
21
- subject.ignored_elements.should include(:bar)
20
+ expect(subject.ignored_elements).to include(:foo)
21
+ expect(subject.ignored_elements).to include(:bar)
22
22
  end
23
23
  end
24
24
 
@@ -27,7 +27,7 @@ describe Schematic::Generator::Sandbox do
27
27
  subject.run do
28
28
  ignore :foo => [:bar]
29
29
  end
30
- subject.ignored_elements[:foo].should == [:bar]
30
+ expect(subject.ignored_elements[:foo]).to eq([:bar])
31
31
  end
32
32
  end
33
33
  end
@@ -38,7 +38,7 @@ describe Schematic::Generator::Sandbox do
38
38
  subject.run do
39
39
  add :foo
40
40
  end
41
- subject.added_elements.keys.should include(:foo)
41
+ expect(subject.added_elements.keys).to include(:foo)
42
42
  end
43
43
  end
44
44
 
@@ -47,7 +47,7 @@ describe Schematic::Generator::Sandbox do
47
47
  subject.run do
48
48
  add :foo => { :bar => nil }
49
49
  end
50
- subject.added_elements[:foo].should == { :bar => nil }
50
+ expect(subject.added_elements[:foo]).to eq({ :bar => nil })
51
51
  end
52
52
  end
53
53
 
@@ -56,7 +56,7 @@ describe Schematic::Generator::Sandbox do
56
56
  subject.run do
57
57
  add :foo => [:bar]
58
58
  end
59
- subject.added_elements[:foo].should == [:bar]
59
+ expect(subject.added_elements[:foo]).to eq([:bar])
60
60
  end
61
61
  end
62
62
  end
@@ -66,15 +66,15 @@ describe Schematic::Generator::Sandbox do
66
66
  subject.run do
67
67
  required :foo
68
68
  end
69
- subject.required_elements.should include(:foo)
69
+ expect(subject.required_elements).to include(:foo)
70
70
  end
71
71
 
72
72
  it "accepts multiple fields" do
73
73
  subject.run do
74
74
  required :foo, :bar
75
75
  end
76
- subject.required_elements.should include(:foo)
77
- subject.required_elements.should include(:bar)
76
+ expect(subject.required_elements).to include(:foo)
77
+ expect(subject.required_elements).to include(:bar)
78
78
  end
79
79
  end
80
80
 
@@ -83,26 +83,26 @@ describe Schematic::Generator::Sandbox do
83
83
  subject.run do
84
84
  not_required :foo
85
85
  end
86
- subject.non_required_elements.should include(:foo)
86
+ expect(subject.non_required_elements).to include(:foo)
87
87
  end
88
88
 
89
89
  it "accepts multiple fields" do
90
90
  subject.run do
91
91
  not_required :foo, :bar
92
92
  end
93
- subject.non_required_elements.should include(:foo)
94
- subject.non_required_elements.should include(:bar)
93
+ expect(subject.non_required_elements).to include(:foo)
94
+ expect(subject.non_required_elements).to include(:bar)
95
95
  end
96
96
  end
97
97
 
98
98
  describe "setting the root" do
99
99
  it "should change the root element name" do
100
100
  subject.run do
101
- root "my_new_root"
101
+ root 'my_new_root'
102
102
  end
103
103
 
104
- subject.xsd_generator.names.element.should == "my-new-root"
105
- subject.xsd_generator.names.element_collection.should == "my-new-roots"
104
+ expect(subject.xsd_generator.names.element).to eq('my-new-root')
105
+ expect(subject.xsd_generator.names.element_collection).to eq('my-new-roots')
106
106
  end
107
107
  end
108
108
  end