anodator 0.0.1
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/.document +5 -0
- data/.rspec +1 -0
- data/Gemfile +13 -0
- data/Gemfile.lock +28 -0
- data/LICENSE.txt +20 -0
- data/README.ja.rdoc +33 -0
- data/README.rdoc +41 -0
- data/Rakefile +50 -0
- data/VERSION +1 -0
- data/example/example_01.rb +129 -0
- data/lib/anodator/anodator_error.rb +5 -0
- data/lib/anodator/check_result.rb +41 -0
- data/lib/anodator/checker.rb +58 -0
- data/lib/anodator/input_spec.rb +199 -0
- data/lib/anodator/input_spec_item.rb +33 -0
- data/lib/anodator/message.rb +59 -0
- data/lib/anodator/output_spec.rb +164 -0
- data/lib/anodator/rule.rb +97 -0
- data/lib/anodator/rule_set.rb +52 -0
- data/lib/anodator/utils.rb +234 -0
- data/lib/anodator/validator/base.rb +168 -0
- data/lib/anodator/validator/blank_validator.rb +14 -0
- data/lib/anodator/validator/complex_validator.rb +60 -0
- data/lib/anodator/validator/configuration_error.rb +8 -0
- data/lib/anodator/validator/date_validator.rb +151 -0
- data/lib/anodator/validator/format_validator.rb +48 -0
- data/lib/anodator/validator/inclusion_validator.rb +21 -0
- data/lib/anodator/validator/length_validator.rb +37 -0
- data/lib/anodator/validator/numeric_validator.rb +46 -0
- data/lib/anodator/validator/presence_validator.rb +14 -0
- data/lib/anodator/validator.rb +10 -0
- data/lib/anodator.rb +3 -0
- data/spec/anodator/check_result_spec.rb +101 -0
- data/spec/anodator/checker_spec.rb +273 -0
- data/spec/anodator/input_spec_item_spec.rb +100 -0
- data/spec/anodator/input_spec_spec.rb +584 -0
- data/spec/anodator/message_spec.rb +112 -0
- data/spec/anodator/output_spec_spec.rb +355 -0
- data/spec/anodator/rule_set_spec.rb +190 -0
- data/spec/anodator/rule_spec.rb +169 -0
- data/spec/anodator/validator/base_spec.rb +214 -0
- data/spec/anodator/validator/blank_validator_spec.rb +52 -0
- data/spec/anodator/validator/complex_validator_spec.rb +268 -0
- data/spec/anodator/validator/date_validator_spec.rb +350 -0
- data/spec/anodator/validator/format_validator_spec.rb +158 -0
- data/spec/anodator/validator/inclusion_validator_spec.rb +77 -0
- data/spec/anodator/validator/length_validator_spec.rb +236 -0
- data/spec/anodator/validator/numeric_validator_spec.rb +468 -0
- data/spec/anodator/validator/presence_validator_spec.rb +52 -0
- data/spec/anodator/validator_spec.rb +16 -0
- data/spec/anodator_spec.rb +2 -0
- data/spec/spec_helper.rb +12 -0
- metadata +188 -0
@@ -0,0 +1,169 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
# Anodator::Rule
|
4
|
+
require "anodator/rule"
|
5
|
+
|
6
|
+
include Anodator
|
7
|
+
|
8
|
+
describe Rule, "#new" do
|
9
|
+
context "with no parameters" do
|
10
|
+
it "should raise ArgumentError" do
|
11
|
+
lambda {
|
12
|
+
Rule.new
|
13
|
+
}.should raise_error ArgumentError
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
context "with only target_expressions" do
|
18
|
+
it "should raise ArgumentError" do
|
19
|
+
lambda {
|
20
|
+
Rule.new(["1", "2", "3"])
|
21
|
+
}.should raise_error ArgumentError
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
context "with target_expressions and message" do
|
26
|
+
it "should raise ArgumentError" do
|
27
|
+
lambda {
|
28
|
+
Rule.new(["1", "2", "3"],
|
29
|
+
Message.new("'[[1::name]]' cannot be blank"))
|
30
|
+
}.should raise_error ArgumentError
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
context "with target_expressions, message and validator" do
|
35
|
+
before(:each) do
|
36
|
+
@new_proc = lambda {
|
37
|
+
v1 = Validator::PresenceValidator.new("1")
|
38
|
+
v2 = Validator::PresenceValidator.new("2")
|
39
|
+
@validator = Validator::ComplexValidator.new(:validators => [v1, v2])
|
40
|
+
@message = Message.new("'[[1::name]]' and '[[2::name]]' cannot be blank")
|
41
|
+
Rule.new(["1", "2"], @message, @validator)
|
42
|
+
}
|
43
|
+
end
|
44
|
+
|
45
|
+
it "should not raise Error" do
|
46
|
+
@new_proc.should_not raise_error
|
47
|
+
end
|
48
|
+
|
49
|
+
context "after generated" do
|
50
|
+
before(:each) do
|
51
|
+
@rule = @new_proc.call
|
52
|
+
end
|
53
|
+
|
54
|
+
it "#target_expressions should equal by initialize" do
|
55
|
+
@rule.target_expressions.should == ["1", "2"]
|
56
|
+
end
|
57
|
+
|
58
|
+
it "#message should equal by initialize" do
|
59
|
+
@rule.message.should == @message
|
60
|
+
end
|
61
|
+
|
62
|
+
it "#validator should equal by initialize" do
|
63
|
+
@rule.validator.should == @validator
|
64
|
+
end
|
65
|
+
|
66
|
+
it "#prerequisite should be nil" do
|
67
|
+
@rule.prerequisite.should be_nil
|
68
|
+
end
|
69
|
+
|
70
|
+
it "#level should equal by default(LEVEL_ERROR)" do
|
71
|
+
@rule.level.should == Rule::LEVEL_ERROR
|
72
|
+
end
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
76
|
+
context "with all parameters" do
|
77
|
+
before(:each) do
|
78
|
+
@new_proc = lambda {
|
79
|
+
v1 = Validator::PresenceValidator.new("1")
|
80
|
+
v2 = Validator::PresenceValidator.new("2")
|
81
|
+
@message = Message.new("'[[1::name]]' and '[[2::name]]' cannot be blank")
|
82
|
+
@validator = Validator::ComplexValidator.new(:validators => [v1, v2])
|
83
|
+
@prerequisite = Validator::BlankValidator.new("3")
|
84
|
+
Rule.new(["1", "2"], @message, @validator, @prerequisite, Rule::LEVEL_WARNING)
|
85
|
+
}
|
86
|
+
end
|
87
|
+
|
88
|
+
it "should not raise Error" do
|
89
|
+
@new_proc.should_not raise_error
|
90
|
+
end
|
91
|
+
|
92
|
+
context "after generated" do
|
93
|
+
before(:each) do
|
94
|
+
@rule = @new_proc.call
|
95
|
+
end
|
96
|
+
|
97
|
+
it "#target_expressions should equal by initialize" do
|
98
|
+
@rule.target_expressions.should == ["1", "2"]
|
99
|
+
end
|
100
|
+
|
101
|
+
it "#message should equal by initialize" do
|
102
|
+
@rule.message.should == @message
|
103
|
+
end
|
104
|
+
|
105
|
+
it "#validator should equal by initialize" do
|
106
|
+
@rule.validator.should == @validator
|
107
|
+
end
|
108
|
+
|
109
|
+
it "#prerequisite should equal by initialize" do
|
110
|
+
@rule.prerequisite.should == @prerequisite
|
111
|
+
end
|
112
|
+
|
113
|
+
it "#level should equal by initialize" do
|
114
|
+
@rule.level.should == Rule::LEVEL_WARNING
|
115
|
+
end
|
116
|
+
end
|
117
|
+
end
|
118
|
+
end
|
119
|
+
|
120
|
+
describe Rule, "#check" do
|
121
|
+
before(:each) do
|
122
|
+
@input_spec = InputSpec.new([
|
123
|
+
{ :number => "1", :name => "item_1" },
|
124
|
+
{ :number => "2", :name => "item_2" },
|
125
|
+
{ :number => "3", :name => "item_3" },
|
126
|
+
])
|
127
|
+
v1 = Validator::PresenceValidator.new("1")
|
128
|
+
v2 = Validator::PresenceValidator.new("2")
|
129
|
+
@message = Message.new("'[[1::name]]' and '[[2::name]]' cannot be blank")
|
130
|
+
@validator = Validator::ComplexValidator.new(:validators => [v1, v2], :logic => Validator::ComplexValidator::LOGIC_AND)
|
131
|
+
@prerequisite = Validator::BlankValidator.new("3")
|
132
|
+
@rule = Rule.new(["item_1", "2"], @message, @validator, @prerequisite)
|
133
|
+
end
|
134
|
+
|
135
|
+
context "when check rule is valid" do
|
136
|
+
before(:each) do
|
137
|
+
@input_spec.source = ["1", "2", ""]
|
138
|
+
Validator::Base.values = @input_spec
|
139
|
+
end
|
140
|
+
|
141
|
+
it { @rule.check.should be_nil }
|
142
|
+
end
|
143
|
+
|
144
|
+
context "when check rule is not valid" do
|
145
|
+
before(:each) do
|
146
|
+
@input_spec.source = ["1", "", ""]
|
147
|
+
Validator::Base.values = @input_spec
|
148
|
+
end
|
149
|
+
|
150
|
+
it { @rule.check.should_not be_nil }
|
151
|
+
it { @rule.check.should be_a CheckResult }
|
152
|
+
|
153
|
+
it "CheckResult#target_numbers must be only number expression" do
|
154
|
+
result = @rule.check
|
155
|
+
result.target_numbers.each do |number|
|
156
|
+
@input_spec.spec_item_by_expression(number).number.should == number
|
157
|
+
end
|
158
|
+
end
|
159
|
+
end
|
160
|
+
|
161
|
+
context "when prerequisite not matched" do
|
162
|
+
before(:each) do
|
163
|
+
@input_spec.source = ["1", "", "3"]
|
164
|
+
Validator::Base.values = @input_spec
|
165
|
+
end
|
166
|
+
|
167
|
+
it { @rule.check.should be_nil }
|
168
|
+
end
|
169
|
+
end
|
@@ -0,0 +1,214 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
# Anodator::Validator::Base
|
4
|
+
require "anodator/validator/base"
|
5
|
+
|
6
|
+
describe Anodator::Validator::Base, "#new" do
|
7
|
+
context "with no parameters" do
|
8
|
+
it "should raise ArgumentError" do
|
9
|
+
lambda {
|
10
|
+
Anodator::Validator::Base.new
|
11
|
+
}.should raise_error ArgumentError
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
context "with only target(nil) parameter" do
|
16
|
+
it "should raise ArgumentError" do
|
17
|
+
lambda {
|
18
|
+
Anodator::Validator::Base.new(nil)
|
19
|
+
}.should raise_error ArgumentError
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
context "with only target("") parameter" do
|
24
|
+
it "should raise ArgumentError" do
|
25
|
+
lambda {
|
26
|
+
Anodator::Validator::Base.new("")
|
27
|
+
}.should raise_error ArgumentError
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
context "with only target(34) parameter" do
|
32
|
+
before(:each) do
|
33
|
+
@new_proc = lambda {
|
34
|
+
Anodator::Validator::Base.new("34")
|
35
|
+
}
|
36
|
+
end
|
37
|
+
|
38
|
+
it "should not raise ArgumentError" do
|
39
|
+
@new_proc.should_not raise_error ArgumentError
|
40
|
+
end
|
41
|
+
|
42
|
+
it "#allow_blank? should be false" do
|
43
|
+
@base = @new_proc.call
|
44
|
+
@base.should_not be_allow_blank
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
context "with target(name) parameter" do
|
49
|
+
context "and allow_blank(true) parameter" do
|
50
|
+
before(:each) do
|
51
|
+
@new_proc = lambda {
|
52
|
+
Anodator::Validator::Base.new("name", :allow_blank => true)
|
53
|
+
}
|
54
|
+
end
|
55
|
+
|
56
|
+
it "should not raise ArgumentError" do
|
57
|
+
@new_proc.should_not raise_error ArgumentError
|
58
|
+
end
|
59
|
+
|
60
|
+
it "#allow_blank? should be true" do
|
61
|
+
@base = @new_proc.call
|
62
|
+
@base.should be_allow_blank
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
context "and allow_blank(false) parameter" do
|
67
|
+
before(:each) do
|
68
|
+
@new_proc = lambda {
|
69
|
+
Anodator::Validator::Base.new("name", :allow_blank => false)
|
70
|
+
}
|
71
|
+
end
|
72
|
+
|
73
|
+
it "should not raise ArgumentError" do
|
74
|
+
@new_proc.should_not raise_error ArgumentError
|
75
|
+
end
|
76
|
+
|
77
|
+
it "#allow_blank? should be false" do
|
78
|
+
@base = @new_proc.call
|
79
|
+
@base.should_not be_allow_blank
|
80
|
+
end
|
81
|
+
end
|
82
|
+
|
83
|
+
context "and description parameter" do
|
84
|
+
before(:each) do
|
85
|
+
@new_proc = lambda {
|
86
|
+
Anodator::Validator::Base.new("name", :description => "description message here.")
|
87
|
+
}
|
88
|
+
end
|
89
|
+
|
90
|
+
it "should not raise ArgumentError" do
|
91
|
+
@new_proc.should_not raise_error ArgumentError
|
92
|
+
end
|
93
|
+
|
94
|
+
it "#description should be 'description message here.'" do
|
95
|
+
@base = @new_proc.call
|
96
|
+
@base.description.should == "description message here."
|
97
|
+
end
|
98
|
+
end
|
99
|
+
|
100
|
+
context "and unknown parameter" do
|
101
|
+
before(:each) do
|
102
|
+
@new_proc = lambda {
|
103
|
+
Anodator::Validator::Base.new("name", :unknown => "value")
|
104
|
+
}
|
105
|
+
end
|
106
|
+
|
107
|
+
it "should raise ArgumentError" do
|
108
|
+
@new_proc.should raise_error ArgumentError
|
109
|
+
end
|
110
|
+
end
|
111
|
+
end
|
112
|
+
end
|
113
|
+
|
114
|
+
describe Anodator::Validator::Base, "#validate" do
|
115
|
+
it "Anodator::Validator::Base#validate raise NotImplementedError" do
|
116
|
+
lambda {
|
117
|
+
Anodator::Validator::Base.new("1").validate
|
118
|
+
}.should raise_error NoMethodError
|
119
|
+
end
|
120
|
+
end
|
121
|
+
|
122
|
+
describe Anodator::Validator::Base, "create a new Validator class to inherit" do
|
123
|
+
before(:all) do
|
124
|
+
module Anodator
|
125
|
+
module Validator
|
126
|
+
class SomeValidator < Base
|
127
|
+
valid_option_keys :some_option
|
128
|
+
default_options :some_option => true
|
129
|
+
end
|
130
|
+
end
|
131
|
+
end
|
132
|
+
end
|
133
|
+
|
134
|
+
it "should have additional option" do
|
135
|
+
Anodator::Validator::SomeValidator.valid_option_keys.
|
136
|
+
should be_include(:some_option)
|
137
|
+
end
|
138
|
+
|
139
|
+
it "should have default option ':allow_blank'" do
|
140
|
+
Anodator::Validator::SomeValidator.valid_option_keys.
|
141
|
+
should be_include(:allow_blank)
|
142
|
+
end
|
143
|
+
|
144
|
+
it "should have default value is true for option 'some_option'" do
|
145
|
+
Anodator::Validator::SomeValidator.default_options[:some_option].
|
146
|
+
should be_true
|
147
|
+
end
|
148
|
+
end
|
149
|
+
|
150
|
+
describe Anodator::Validator::Base, "create a new Validator class with unknown defualt options" do
|
151
|
+
before(:all) do
|
152
|
+
@new_class_proc = lambda {
|
153
|
+
module Anodator
|
154
|
+
module Validator
|
155
|
+
class InvalidDefaultOptionValidator < Base
|
156
|
+
valid_option_keys :some_option
|
157
|
+
default_options :wrong_option => 11
|
158
|
+
end
|
159
|
+
end
|
160
|
+
end
|
161
|
+
}
|
162
|
+
end
|
163
|
+
|
164
|
+
it "should raise error" do
|
165
|
+
@new_class_proc.should raise_error ArgumentError
|
166
|
+
end
|
167
|
+
end
|
168
|
+
|
169
|
+
describe Anodator::Validator::Base, "set values for validation" do
|
170
|
+
context "for nil value" do
|
171
|
+
it "should raise argument error" do
|
172
|
+
lambda {
|
173
|
+
Anodator::Validator::Base.values = nil
|
174
|
+
}.should raise_error ArgumentError
|
175
|
+
end
|
176
|
+
end
|
177
|
+
|
178
|
+
context "for String value" do
|
179
|
+
it "should not raise argument error" do
|
180
|
+
lambda {
|
181
|
+
Anodator::Validator::Base.values = "value"
|
182
|
+
}.should_not raise_error ArgumentError
|
183
|
+
end
|
184
|
+
end
|
185
|
+
|
186
|
+
context "for Array values" do
|
187
|
+
it "should not raise argument error" do
|
188
|
+
lambda {
|
189
|
+
Anodator::Validator::Base.values = [1, 2, 3]
|
190
|
+
}.should_not raise_error ArgumentError
|
191
|
+
end
|
192
|
+
end
|
193
|
+
|
194
|
+
context "for Hash values" do
|
195
|
+
it "should not raise argument error" do
|
196
|
+
lambda {
|
197
|
+
Anodator::Validator::Base.values = { "1" => 1, "2" => 2, "3" => 3 }
|
198
|
+
}.should_not raise_error ArgumentError
|
199
|
+
end
|
200
|
+
end
|
201
|
+
|
202
|
+
context "for another values what can respond to [] method" do
|
203
|
+
it "should not raise argument error" do
|
204
|
+
lambda {
|
205
|
+
class Dict
|
206
|
+
def []
|
207
|
+
return ""
|
208
|
+
end
|
209
|
+
end
|
210
|
+
Anodator::Validator::Base.values = Dict.new
|
211
|
+
}.should_not raise_error ArgumentError
|
212
|
+
end
|
213
|
+
end
|
214
|
+
end
|
@@ -0,0 +1,52 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
# Anodator::Validator::BlankValidator
|
4
|
+
require "anodator/validator/blank_validator"
|
5
|
+
|
6
|
+
describe Anodator::Validator::BlankValidator, ".new" do
|
7
|
+
context "with no parameters" do
|
8
|
+
it "should raise ArgumentError" do
|
9
|
+
lambda {
|
10
|
+
Anodator::Validator::BlankValidator.new
|
11
|
+
}.should raise_error ArgumentError
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
context "with only target parameter" do
|
16
|
+
it "should not raise error" do
|
17
|
+
lambda {
|
18
|
+
Anodator::Validator::BlankValidator.new("1")
|
19
|
+
}.should_not raise_error
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
describe Anodator::Validator::BlankValidator, "#valid?" do
|
25
|
+
before(:each) do
|
26
|
+
@validator = Anodator::Validator::BlankValidator.new("1")
|
27
|
+
end
|
28
|
+
|
29
|
+
context "target value is blank" do
|
30
|
+
before(:each) do
|
31
|
+
Anodator::Validator::Base.values = { "1" => "" }
|
32
|
+
end
|
33
|
+
|
34
|
+
it { @validator.should be_valid }
|
35
|
+
end
|
36
|
+
|
37
|
+
context "target value is '1'" do
|
38
|
+
before(:each) do
|
39
|
+
Anodator::Validator::Base.values = { "1" => "1" }
|
40
|
+
end
|
41
|
+
|
42
|
+
it { @validator.should_not be_valid }
|
43
|
+
end
|
44
|
+
|
45
|
+
context "target value is 'some message'" do
|
46
|
+
before(:each) do
|
47
|
+
Anodator::Validator::Base.values = { "1" => "some message" }
|
48
|
+
end
|
49
|
+
|
50
|
+
it { @validator.should_not be_valid }
|
51
|
+
end
|
52
|
+
end
|
@@ -0,0 +1,268 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
# Anodator::Validator::ComplexValidator
|
4
|
+
require "anodator/validator/presence_validator"
|
5
|
+
require "anodator/validator/complex_validator"
|
6
|
+
|
7
|
+
include Anodator::Validator
|
8
|
+
|
9
|
+
describe ComplexValidator, ".new" do
|
10
|
+
context "with no paramerters" do
|
11
|
+
it "should not raise error" do
|
12
|
+
lambda {
|
13
|
+
ComplexValidator.new
|
14
|
+
}.should_not raise_error
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
context "with :validators only, without :logic" do
|
19
|
+
before(:each) do
|
20
|
+
@new_proc = lambda {
|
21
|
+
validators = []
|
22
|
+
validators << PresenceValidator.new("1")
|
23
|
+
validators << PresenceValidator.new("3")
|
24
|
+
ComplexValidator.new(:validators => validators)
|
25
|
+
}
|
26
|
+
end
|
27
|
+
|
28
|
+
it "should not raise error" do
|
29
|
+
@new_proc.should_not raise_error
|
30
|
+
end
|
31
|
+
|
32
|
+
it ":logic should be ComplexValidator::LOGIC_AND" do
|
33
|
+
complex_validator = @new_proc.call
|
34
|
+
complex_validator.options[:logic].should == ComplexValidator::LOGIC_AND
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
context "with :validators and :and_or option" do
|
39
|
+
before(:each) do
|
40
|
+
@new_proc = lambda {
|
41
|
+
validators = []
|
42
|
+
validators << PresenceValidator.new("1")
|
43
|
+
validators << PresenceValidator.new("3")
|
44
|
+
ComplexValidator.new(:validators => validators,
|
45
|
+
:logic => ComplexValidator::LOGIC_OR)
|
46
|
+
}
|
47
|
+
end
|
48
|
+
|
49
|
+
it "should not raise error" do
|
50
|
+
@new_proc.should_not raise_error
|
51
|
+
end
|
52
|
+
|
53
|
+
it ":logic should be ComplexValidator::LOGIC_OR" do
|
54
|
+
complex_validator = @new_proc.call
|
55
|
+
complex_validator.options[:logic].should == ComplexValidator::LOGIC_OR
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
describe ComplexValidator, "#valid?" do
|
61
|
+
context "no paramerters" do
|
62
|
+
before(:each) do
|
63
|
+
@validator = ComplexValidator.new
|
64
|
+
Base.values = {
|
65
|
+
"1" => "123",
|
66
|
+
"2" => "",
|
67
|
+
"3" => "message",
|
68
|
+
"5" => "value",
|
69
|
+
}
|
70
|
+
end
|
71
|
+
|
72
|
+
it "should raise error ConfigurationError" do
|
73
|
+
lambda {
|
74
|
+
@validator.valid?
|
75
|
+
}.should raise_error ConfigurationError
|
76
|
+
end
|
77
|
+
end
|
78
|
+
|
79
|
+
context "only :validators option" do
|
80
|
+
before(:each) do
|
81
|
+
@validator = ComplexValidator.new
|
82
|
+
validators = []
|
83
|
+
validators << PresenceValidator.new("1")
|
84
|
+
validators << PresenceValidator.new("3")
|
85
|
+
@validator = ComplexValidator.new(:validators => validators)
|
86
|
+
end
|
87
|
+
|
88
|
+
context "for values are valid" do
|
89
|
+
before(:each) do
|
90
|
+
Base.values = {
|
91
|
+
"1" => "1",
|
92
|
+
"2" => "",
|
93
|
+
"3" => "3",
|
94
|
+
}
|
95
|
+
end
|
96
|
+
|
97
|
+
it { @validator.should be_valid }
|
98
|
+
end
|
99
|
+
|
100
|
+
context "for values one valid, the other invalid" do
|
101
|
+
before(:each) do
|
102
|
+
Base.values = {
|
103
|
+
"1" => "1",
|
104
|
+
"2" => "",
|
105
|
+
"3" => "",
|
106
|
+
}
|
107
|
+
end
|
108
|
+
|
109
|
+
it { @validator.should_not be_valid }
|
110
|
+
end
|
111
|
+
|
112
|
+
context "for values are invalid at all values" do
|
113
|
+
before(:each) do
|
114
|
+
Base.values = {
|
115
|
+
"1" => "",
|
116
|
+
"2" => "3",
|
117
|
+
"3" => "",
|
118
|
+
}
|
119
|
+
end
|
120
|
+
|
121
|
+
it { @validator.should_not be_valid }
|
122
|
+
end
|
123
|
+
end
|
124
|
+
|
125
|
+
context ":validators and :logic OR option" do
|
126
|
+
before(:each) do
|
127
|
+
validators = []
|
128
|
+
validators << PresenceValidator.new("1")
|
129
|
+
validators << PresenceValidator.new("3")
|
130
|
+
@validator = ComplexValidator.new(:validators => validators,
|
131
|
+
:logic => ComplexValidator::LOGIC_OR)
|
132
|
+
end
|
133
|
+
|
134
|
+
context "for values are valid" do
|
135
|
+
before(:each) do
|
136
|
+
Base.values = {
|
137
|
+
"1" => "1",
|
138
|
+
"2" => "",
|
139
|
+
"3" => "3",
|
140
|
+
}
|
141
|
+
end
|
142
|
+
|
143
|
+
it { @validator.should be_valid }
|
144
|
+
end
|
145
|
+
|
146
|
+
context "for values one valid, the other invalid" do
|
147
|
+
before(:each) do
|
148
|
+
Base.values = {
|
149
|
+
"1" => "1",
|
150
|
+
"2" => "",
|
151
|
+
"3" => "",
|
152
|
+
}
|
153
|
+
end
|
154
|
+
|
155
|
+
it { @validator.should be_valid }
|
156
|
+
end
|
157
|
+
|
158
|
+
context "for values are invalid at all values" do
|
159
|
+
before(:each) do
|
160
|
+
Base.values = {
|
161
|
+
"1" => "",
|
162
|
+
"2" => "3",
|
163
|
+
"3" => "",
|
164
|
+
}
|
165
|
+
end
|
166
|
+
|
167
|
+
it { @validator.should_not be_valid }
|
168
|
+
end
|
169
|
+
end
|
170
|
+
|
171
|
+
context "for nested complex validator(A && (B || C))" do
|
172
|
+
before(:each) do
|
173
|
+
validators1, validators2 = [], []
|
174
|
+
validators2 << PresenceValidator.new("A")
|
175
|
+
validators1 << PresenceValidator.new("B")
|
176
|
+
validators1 << PresenceValidator.new("C")
|
177
|
+
validator1 = ComplexValidator.new(:validators => validators1,
|
178
|
+
:logic => ComplexValidator::LOGIC_OR)
|
179
|
+
validators2 << validator1
|
180
|
+
@validator = ComplexValidator.new(:validators => validators2,
|
181
|
+
:logic => ComplexValidator::LOGIC_AND)
|
182
|
+
end
|
183
|
+
|
184
|
+
context "for A(1), B(1), C(1)" do
|
185
|
+
before(:each) do
|
186
|
+
Base.values = {
|
187
|
+
"A" => "1",
|
188
|
+
"B" => "1",
|
189
|
+
"C" => "1",
|
190
|
+
}
|
191
|
+
end
|
192
|
+
|
193
|
+
it { @validator.should be_valid }
|
194
|
+
end
|
195
|
+
|
196
|
+
context "for A(), B(1), C(1)" do
|
197
|
+
before(:each) do
|
198
|
+
Base.values = {
|
199
|
+
"A" => "",
|
200
|
+
"B" => "1",
|
201
|
+
"C" => "1",
|
202
|
+
}
|
203
|
+
end
|
204
|
+
|
205
|
+
it { @validator.should_not be_valid }
|
206
|
+
end
|
207
|
+
|
208
|
+
context "for A(), B(), C(1)" do
|
209
|
+
before(:each) do
|
210
|
+
Base.values = {
|
211
|
+
"A" => "",
|
212
|
+
"B" => "",
|
213
|
+
"C" => "1",
|
214
|
+
}
|
215
|
+
end
|
216
|
+
|
217
|
+
it { @validator.should_not be_valid }
|
218
|
+
end
|
219
|
+
|
220
|
+
context "for A(1), B(), C()" do
|
221
|
+
before(:each) do
|
222
|
+
Base.values = {
|
223
|
+
"A" => "1",
|
224
|
+
"B" => "",
|
225
|
+
"C" => "",
|
226
|
+
}
|
227
|
+
end
|
228
|
+
|
229
|
+
it { @validator.should_not be_valid }
|
230
|
+
end
|
231
|
+
|
232
|
+
context "for A(1), B(), C(1)" do
|
233
|
+
before(:each) do
|
234
|
+
Base.values = {
|
235
|
+
"A" => "1",
|
236
|
+
"B" => "",
|
237
|
+
"C" => "1",
|
238
|
+
}
|
239
|
+
end
|
240
|
+
|
241
|
+
it { @validator.should be_valid }
|
242
|
+
end
|
243
|
+
|
244
|
+
context "for A(1), B(1), C()" do
|
245
|
+
before(:each) do
|
246
|
+
Base.values = {
|
247
|
+
"A" => "1",
|
248
|
+
"B" => "1",
|
249
|
+
"C" => "",
|
250
|
+
}
|
251
|
+
end
|
252
|
+
|
253
|
+
it { @validator.should be_valid }
|
254
|
+
end
|
255
|
+
|
256
|
+
context "for A(), B(), C()" do
|
257
|
+
before(:each) do
|
258
|
+
Base.values = {
|
259
|
+
"A" => "",
|
260
|
+
"B" => "",
|
261
|
+
"C" => "",
|
262
|
+
}
|
263
|
+
end
|
264
|
+
|
265
|
+
it { @validator.should_not be_valid }
|
266
|
+
end
|
267
|
+
end
|
268
|
+
end
|