validatable 1.3.4 → 1.4.0
Sign up to get free protection for your applications and to get access to all the features.
- data/README +1 -1
- data/lib/validatable_class_methods.rb +11 -3
- data/lib/validatable_instance_methods.rb +30 -15
- data/lib/validations/validation_base.rb +15 -7
- data/rakefile.rb +1 -1
- data/test/functional/validatable_test.rb +50 -33
- data/test/unit/validatable_test.rb +17 -3
- data/test/unit/validates_acceptance_of_test.rb +4 -3
- data/test/unit/validates_confirmation_of_test.rb +11 -11
- data/test/unit/validates_format_of_test.rb +7 -7
- data/test/unit/validates_length_of_test.rb +12 -12
- data/test/unit/validates_numericality_of_test.rb +8 -8
- data/test/unit/validates_presence_of_test.rb +5 -4
- data/test/unit/validates_true_for_test.rb +6 -6
- data/test/unit/validation_base_test.rb +29 -18
- metadata +3 -3
data/README
CHANGED
@@ -115,4 +115,4 @@ In the above example the attribute "name" is appended to the message.
|
|
115
115
|
See the tests for more examples
|
116
116
|
|
117
117
|
== Contributors
|
118
|
-
Rick Bradley, Anonymous Z, Jason Miller, Ali Aghareza, Xavier Shay, Dan Manges, Karthik Krishnan and Venkat
|
118
|
+
Rick Bradley, Anonymous Z, Jason Miller, Ali Aghareza, Xavier Shay, Dan Manges, Karthik Krishnan and Venkat, Clint Bishop
|
@@ -195,11 +195,15 @@ module Validatable
|
|
195
195
|
children_to_validate << ChildValidation.new(attribute_to_validate, options[:map] || {}, options[:if] || lambda { true })
|
196
196
|
end
|
197
197
|
|
198
|
-
def validate_children(instance,
|
198
|
+
def validate_children(instance, group) #:nodoc:
|
199
199
|
self.children_to_validate.each do |child_validation|
|
200
200
|
next unless child_validation.should_validate?(instance)
|
201
201
|
child = instance.send child_validation.attribute
|
202
|
-
child.
|
202
|
+
if (child.respond_to?(:valid_for_group?))
|
203
|
+
child.valid_for_group?(group)
|
204
|
+
else
|
205
|
+
child.valid?
|
206
|
+
end
|
203
207
|
child.errors.each do |attribute, messages|
|
204
208
|
if messages.is_a?(String)
|
205
209
|
add_error(instance, child_validation.map[attribute.to_sym] || attribute, messages)
|
@@ -220,12 +224,16 @@ module Validatable
|
|
220
224
|
instance.errors.add(attribute, msg)
|
221
225
|
end
|
222
226
|
|
227
|
+
def validation_keys_include?(key)
|
228
|
+
validations.map { |validation| validation.key }.include?(key)
|
229
|
+
end
|
230
|
+
|
223
231
|
protected
|
224
232
|
|
225
233
|
def add_validations(args, klass) #:nodoc:
|
226
234
|
options = args.last.is_a?(Hash) ? args.pop : {}
|
227
235
|
args.each do |attribute|
|
228
|
-
new_validation = klass.new attribute, options
|
236
|
+
new_validation = klass.new self, attribute, options
|
229
237
|
self.validations << new_validation
|
230
238
|
self.create_valid_method_for_groups new_validation.groups
|
231
239
|
end
|
@@ -17,17 +17,35 @@ module Validatable
|
|
17
17
|
@errors ||= Validatable::Errors.new
|
18
18
|
end
|
19
19
|
|
20
|
-
|
21
|
-
def valid_for_group?(*groups) #:nodoc:
|
20
|
+
def valid_for_group?(group=nil) #:nodoc:
|
22
21
|
errors.clear
|
23
|
-
self.class.validate_children(self,
|
24
|
-
self.validate(
|
22
|
+
self.class.validate_children(self, group)
|
23
|
+
self.validate(group)
|
25
24
|
errors.empty?
|
26
25
|
end
|
26
|
+
|
27
|
+
def times_validated(key)
|
28
|
+
times_validated_hash[key] || 0
|
29
|
+
end
|
30
|
+
|
31
|
+
def times_validated_hash
|
32
|
+
@times_validated_hash ||= {}
|
33
|
+
end
|
34
|
+
|
35
|
+
def increment_times_validated_for(validation)
|
36
|
+
if validation.key != nil
|
37
|
+
if times_validated_hash[validation.key].nil?
|
38
|
+
times_validated_hash[validation.key] = 1
|
39
|
+
else
|
40
|
+
times_validated_hash[validation.key] += 1
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
27
44
|
|
28
|
-
|
45
|
+
protected
|
46
|
+
def validate(group) #:nodoc:
|
29
47
|
validation_levels.each do |level|
|
30
|
-
|
48
|
+
validations_for_level_and_group(level, group).each do |validation|
|
31
49
|
run_validation(validation) if validation.should_validate?(self)
|
32
50
|
end
|
33
51
|
return unless self.errors.empty?
|
@@ -37,6 +55,7 @@ module Validatable
|
|
37
55
|
def run_validation(validation) #:nodoc:
|
38
56
|
validation_result = validation.valid?(self)
|
39
57
|
add_error(validation.attribute, validation.message(self)) unless validation_result
|
58
|
+
increment_times_validated_for(validation)
|
40
59
|
validation.run_after_validate(validation_result, self, validation.attribute)
|
41
60
|
end
|
42
61
|
|
@@ -44,17 +63,13 @@ module Validatable
|
|
44
63
|
self.class.add_error(self, attribute, message)
|
45
64
|
end
|
46
65
|
|
47
|
-
def
|
48
|
-
validations_for_level = self.validations.select { |validation| validation.level == level }
|
49
|
-
return validations_for_level if
|
50
|
-
validations_for_level.select { |validation|
|
66
|
+
def validations_for_level_and_group(level, group) #:nodoc:
|
67
|
+
validations_for_level = self.class.validations.select { |validation| validation.level == level }
|
68
|
+
return validations_for_level if group.nil?
|
69
|
+
validations_for_level.select { |validation| validation.groups.include?(group) }
|
51
70
|
end
|
52
71
|
|
53
72
|
def validation_levels #:nodoc:
|
54
|
-
self.validations.inject([1]) { |accum,validation| accum << validation.level }.uniq.sort
|
55
|
-
end
|
56
|
-
|
57
|
-
def validations #:nodoc:
|
58
|
-
@validations ||= self.class.validations.collect { |validation| validation.dup }
|
73
|
+
self.class.validations.inject([1]) { |accum,validation| accum << validation.level }.uniq.sort
|
59
74
|
end
|
60
75
|
end
|
@@ -41,11 +41,11 @@ module Validatable
|
|
41
41
|
include Understandable
|
42
42
|
include Requireable
|
43
43
|
|
44
|
-
option :message, :if, :times, :level, :groups
|
45
|
-
default :
|
44
|
+
option :message, :if, :times, :level, :groups, :key
|
45
|
+
default :level => 1, :groups => []
|
46
46
|
attr_accessor :attribute
|
47
47
|
|
48
|
-
def initialize(attribute, options={})
|
48
|
+
def initialize(klass, attribute, options={})
|
49
49
|
must_understand options
|
50
50
|
requires options
|
51
51
|
self.class.all_understandings.each do |understanding|
|
@@ -54,20 +54,28 @@ module Validatable
|
|
54
54
|
end
|
55
55
|
self.attribute = attribute
|
56
56
|
self.groups = [self.groups] unless self.groups.is_a?(Array)
|
57
|
+
self.key = "#{self.class.name}:#{self.attribute}:#{self.key || "key"}" unless self.times.nil?
|
58
|
+
raise_error_if_key_is_dup(klass) unless self.key.nil?
|
59
|
+
end
|
60
|
+
|
61
|
+
def raise_error_if_key_is_dup(klass)
|
62
|
+
message = "key #{self.key} must be unique, provide the :key option to specify a unique key"
|
63
|
+
raise ArgumentError.new(message) if klass.validation_keys_include? self.key
|
57
64
|
end
|
58
65
|
|
59
66
|
def should_validate?(instance)
|
60
|
-
|
67
|
+
result = validate_this_time?(instance)
|
68
|
+
result &&= instance.instance_eval(&self.if) unless self.if.nil?
|
69
|
+
result
|
61
70
|
end
|
62
71
|
|
63
72
|
def message(instance)
|
64
73
|
@message.respond_to?(:call) ? instance.instance_eval(&@message) : @message
|
65
74
|
end
|
66
75
|
|
67
|
-
def validate_this_time?
|
76
|
+
def validate_this_time?(instance)
|
68
77
|
return true if @times.nil?
|
69
|
-
self.times
|
70
|
-
self.times >= 0
|
78
|
+
self.times > instance.times_validated(self.key)
|
71
79
|
end
|
72
80
|
|
73
81
|
def run_after_validate(result, instance, attribute)
|
data/rakefile.rb
CHANGED
@@ -29,7 +29,7 @@ Gem::manage_gems
|
|
29
29
|
specification = Gem::Specification.new do |s|
|
30
30
|
s.name = "validatable"
|
31
31
|
s.summary = "Validatable is a library for adding validations."
|
32
|
-
s.version = "1.
|
32
|
+
s.version = "1.4.0"
|
33
33
|
s.author = 'Jay Fields'
|
34
34
|
s.description = "Validatable is a library for adding validations."
|
35
35
|
s.email = 'validatable-developer@rubyforge.org'
|
@@ -2,20 +2,45 @@ require File.expand_path(File.dirname(__FILE__) + '/../test_helper')
|
|
2
2
|
|
3
3
|
module Functional
|
4
4
|
class ValidatableTest < Test::Unit::TestCase
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
5
|
+
|
6
|
+
expect ArgumentError do
|
7
|
+
Class.new do
|
8
|
+
include Validatable
|
9
|
+
attr_accessor :name
|
10
|
+
validates_presence_of :name, :times => 1
|
11
|
+
validates_presence_of :name, :times => 1
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
expect ArgumentError do
|
16
|
+
Class.new do
|
17
|
+
include Validatable
|
18
|
+
attr_accessor :name
|
19
|
+
validates_presence_of :name, :times => 1, :key => 'anything'
|
20
|
+
validates_presence_of :name, :times => 1, :key => 'anything'
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
expect "is invalid" do
|
25
|
+
child_class = Class.new do
|
9
26
|
include Validatable
|
10
27
|
attr_accessor :name, :address
|
11
|
-
validates_presence_of :name
|
12
|
-
|
28
|
+
validates_presence_of :name
|
29
|
+
validates_format_of :address, :with => /.+/
|
30
|
+
end
|
31
|
+
klass = Class.new do
|
32
|
+
include Validatable
|
33
|
+
include_validations_for :child
|
34
|
+
define_method :child do
|
35
|
+
child_class.new
|
36
|
+
end
|
13
37
|
end
|
14
38
|
instance = klass.new
|
15
39
|
instance.valid?
|
40
|
+
instance.errors.on(:address)
|
16
41
|
end
|
17
42
|
|
18
|
-
|
43
|
+
expect "can't be empty" do
|
19
44
|
child_class = Class.new do
|
20
45
|
include Validatable
|
21
46
|
attr_accessor :name, :address
|
@@ -31,8 +56,7 @@ module Functional
|
|
31
56
|
end
|
32
57
|
instance = klass.new
|
33
58
|
instance.valid?
|
34
|
-
|
35
|
-
assert_equal "can't be empty", instance.errors.on(:name)
|
59
|
+
instance.errors.on(:name)
|
36
60
|
end
|
37
61
|
|
38
62
|
|
@@ -42,20 +66,16 @@ module Functional
|
|
42
66
|
attr_accessor :name
|
43
67
|
validates_presence_of :name
|
44
68
|
end
|
69
|
+
|
45
70
|
klass = Class.new do
|
46
71
|
include Validatable
|
47
72
|
extend Forwardable
|
48
|
-
|
49
73
|
def_delegator :child, :name
|
50
|
-
|
51
74
|
validates_true_for :name, :logic => lambda { false }, :level => 2, :message => "invalid message"
|
52
|
-
|
53
75
|
include_validations_for :child
|
54
|
-
|
55
76
|
define_method :child do
|
56
77
|
@child ||= child_class.new
|
57
78
|
end
|
58
|
-
|
59
79
|
end
|
60
80
|
instance = klass.new
|
61
81
|
instance.valid?
|
@@ -67,15 +87,12 @@ module Functional
|
|
67
87
|
include Validatable
|
68
88
|
attr_accessor :name
|
69
89
|
validates_presence_of :name
|
70
|
-
|
71
90
|
end
|
91
|
+
|
72
92
|
klass = Class.new do
|
73
93
|
include Validatable
|
74
|
-
|
75
94
|
validates_true_for :address, :logic => lambda { false }, :level => 1, :message => "invalid message"
|
76
|
-
|
77
95
|
include_validations_for :child
|
78
|
-
|
79
96
|
define_method :child do
|
80
97
|
@child ||= child_class.new
|
81
98
|
end
|
@@ -87,7 +104,7 @@ module Functional
|
|
87
104
|
assert_equal "invalid message", instance.errors.on(:address)
|
88
105
|
end
|
89
106
|
|
90
|
-
|
107
|
+
expect "can't be empty" do
|
91
108
|
child_class = Class.new do
|
92
109
|
include Validatable
|
93
110
|
attr_accessor :name, :address
|
@@ -102,10 +119,10 @@ module Functional
|
|
102
119
|
end
|
103
120
|
instance = klass.new
|
104
121
|
instance.valid?
|
105
|
-
|
122
|
+
instance.errors.on(:namen)
|
106
123
|
end
|
107
124
|
|
108
|
-
|
125
|
+
expect "can't be empty" do
|
109
126
|
child_class = Class.new do
|
110
127
|
include Validatable
|
111
128
|
attr_accessor :name, :address
|
@@ -120,10 +137,10 @@ module Functional
|
|
120
137
|
end
|
121
138
|
instance = klass.new
|
122
139
|
instance.valid?
|
123
|
-
|
140
|
+
instance.errors.on(:name)
|
124
141
|
end
|
125
142
|
|
126
|
-
|
143
|
+
expect true do
|
127
144
|
child_class = Class.new do
|
128
145
|
include Validatable
|
129
146
|
attr_accessor :name, :address
|
@@ -137,7 +154,7 @@ module Functional
|
|
137
154
|
end
|
138
155
|
end
|
139
156
|
instance = klass.new
|
140
|
-
|
157
|
+
instance.valid?
|
141
158
|
end
|
142
159
|
|
143
160
|
test "classes only have valid_for_* methods for groups that appear in their validations" do
|
@@ -166,7 +183,7 @@ module Functional
|
|
166
183
|
assert_equal nil, instance.errors.on(:name)
|
167
184
|
end
|
168
185
|
|
169
|
-
|
186
|
+
expect "can't be empty twice changed message" do
|
170
187
|
klass = Class.new do
|
171
188
|
include Validatable
|
172
189
|
validates_presence_of :name
|
@@ -185,39 +202,39 @@ module Functional
|
|
185
202
|
end
|
186
203
|
instance = klass.new
|
187
204
|
instance.valid?
|
188
|
-
assert_equal "can't be empty twice changed message", instance.errors.on(:name).join
|
189
205
|
Validatable::ValidatesPresenceOf.after_validations.clear
|
190
206
|
Validatable::ValidationBase.after_validations.clear
|
207
|
+
instance.errors.on(:name).join
|
191
208
|
end
|
192
209
|
|
193
|
-
|
210
|
+
expect false do
|
194
211
|
klass = Class.new do
|
195
212
|
include Validatable
|
196
213
|
validates_presence_of :name, :groups => :group_one
|
197
214
|
attr_accessor :name
|
198
215
|
end
|
199
216
|
instance = klass.new
|
200
|
-
|
217
|
+
instance.valid_for_group_one?
|
201
218
|
end
|
202
219
|
|
203
|
-
|
220
|
+
expect false do
|
204
221
|
klass = Class.new do
|
205
222
|
include Validatable
|
206
223
|
validates_presence_of :name, :groups => [:group_one, :group_two]
|
207
224
|
attr_accessor :name
|
208
225
|
end
|
209
226
|
instance = klass.new
|
210
|
-
|
227
|
+
instance.valid_for_group_one?
|
211
228
|
end
|
212
229
|
|
213
|
-
|
230
|
+
expect false do
|
214
231
|
klass = Class.new do
|
215
232
|
include Validatable
|
216
233
|
validates_presence_of :name, :groups => :group_one
|
217
234
|
attr_accessor :name
|
218
235
|
end
|
219
236
|
instance = klass.new
|
220
|
-
|
237
|
+
instance.valid?
|
221
238
|
end
|
222
239
|
|
223
240
|
expect true do
|
@@ -242,7 +259,7 @@ module Functional
|
|
242
259
|
instance2 = klass.new
|
243
260
|
instance2.valid?
|
244
261
|
end
|
245
|
-
|
262
|
+
|
246
263
|
expect "name message" do
|
247
264
|
klass = Class.new do
|
248
265
|
include Validatable
|
@@ -3,8 +3,7 @@ require File.expand_path(File.dirname(__FILE__) + '/../test_helper')
|
|
3
3
|
module Unit
|
4
4
|
class ValidatableTest < Test::Unit::TestCase
|
5
5
|
expect false do
|
6
|
-
validation =
|
7
|
-
:attribute => "attribute", :message => "message", :level => 1, :run_after_validate => nil)
|
6
|
+
validation = stub_everything(:valid? => false, :should_validate? => true, :attribute => "attribute", :level => 1)
|
8
7
|
klass = Class.new do
|
9
8
|
include Validatable
|
10
9
|
validations << validation
|
@@ -21,6 +20,21 @@ module Unit
|
|
21
20
|
instance.valid?
|
22
21
|
instance.errors.empty?
|
23
22
|
end
|
24
|
-
|
23
|
+
|
24
|
+
expect false do
|
25
|
+
klass = Class.new do
|
26
|
+
include Validatable
|
27
|
+
end
|
28
|
+
klass.validation_keys_include?("anything")
|
29
|
+
end
|
30
|
+
|
31
|
+
expect true do
|
32
|
+
validation = stub_everything(:key => "key")
|
33
|
+
klass = Class.new do
|
34
|
+
include Validatable
|
35
|
+
validations << validation
|
36
|
+
end
|
37
|
+
klass.validation_keys_include?("key")
|
38
|
+
end
|
25
39
|
end
|
26
40
|
end
|
@@ -2,19 +2,20 @@ require File.expand_path(File.dirname(__FILE__) + '/../test_helper')
|
|
2
2
|
|
3
3
|
class ValidatesAcceptanceOfTest < Test::Unit::TestCase
|
4
4
|
test "valid acceptance" do
|
5
|
-
validation = Validatable::ValidatesAcceptanceOf.new :acceptance
|
5
|
+
validation = Validatable::ValidatesAcceptanceOf.new stub, :acceptance
|
6
6
|
instance = stub(:acceptance=>'true')
|
7
7
|
assert_equal true, validation.valid?(instance)
|
8
8
|
end
|
9
9
|
|
10
10
|
test "invalid acceptance" do
|
11
|
-
validation = Validatable::ValidatesAcceptanceOf.new :acceptance
|
11
|
+
validation = Validatable::ValidatesAcceptanceOf.new stub, :acceptance
|
12
12
|
instance = stub(:acceptance=>'false')
|
13
13
|
assert_equal false, validation.valid?(instance)
|
14
14
|
end
|
15
15
|
|
16
16
|
expect true do
|
17
|
-
|
17
|
+
options = {:message => nil, :if => nil, :times => nil, :level => nil, :groups => nil}
|
18
|
+
Validatable::ValidatesAcceptanceOf.new(stub, :test).must_understand(options)
|
18
19
|
end
|
19
20
|
|
20
21
|
end
|
@@ -2,62 +2,62 @@ require File.expand_path(File.dirname(__FILE__) + '/../test_helper')
|
|
2
2
|
|
3
3
|
class ValidatesConfirmationOfTest < Test::Unit::TestCase
|
4
4
|
test "valid confirmation" do
|
5
|
-
validation = Validatable::ValidatesConfirmationOf.new :username
|
5
|
+
validation = Validatable::ValidatesConfirmationOf.new stub, :username
|
6
6
|
instance = stub(:username=>"username", :username_confirmation=>"username")
|
7
7
|
assert_equal true, validation.valid?(instance)
|
8
8
|
end
|
9
9
|
|
10
10
|
test "invalid confirmation" do
|
11
|
-
validation = Validatable::ValidatesConfirmationOf.new :username
|
11
|
+
validation = Validatable::ValidatesConfirmationOf.new stub, :username
|
12
12
|
instance = stub(:username=>"username", :username_confirmation=>"usessrname")
|
13
13
|
assert_equal false, validation.valid?(instance)
|
14
14
|
end
|
15
15
|
|
16
16
|
test "valid confirmation with case insensitive" do
|
17
|
-
validation = Validatable::ValidatesConfirmationOf.new :username, :case_sensitive => false
|
17
|
+
validation = Validatable::ValidatesConfirmationOf.new stub, :username, :case_sensitive => false
|
18
18
|
instance = stub(:username=>"username", :username_confirmation=>"USERNAME")
|
19
19
|
assert_equal true, validation.valid?(instance)
|
20
20
|
end
|
21
21
|
|
22
22
|
test "invalid confirmation with case sensitive" do
|
23
|
-
validation = Validatable::ValidatesConfirmationOf.new :username, :case_sensitive => true
|
23
|
+
validation = Validatable::ValidatesConfirmationOf.new stub, :username, :case_sensitive => true
|
24
24
|
instance = stub(:username=>"username", :username_confirmation=>"USERNAME")
|
25
25
|
assert_equal false, validation.valid?(instance)
|
26
26
|
end
|
27
27
|
|
28
28
|
test "invalid confirmation if value is nil and confirmation is not with case sensitive true" do
|
29
|
-
validation = Validatable::ValidatesConfirmationOf.new :username, :case_sensitive => true
|
29
|
+
validation = Validatable::ValidatesConfirmationOf.new stub, :username, :case_sensitive => true
|
30
30
|
assert_equal false, validation.valid?(stub(:username => nil, :username_confirmation => 'something'))
|
31
31
|
end
|
32
32
|
|
33
33
|
test "invalid confirmation if confirmation is nil and value is not with case sensitive true" do
|
34
|
-
validation = Validatable::ValidatesConfirmationOf.new :username, :case_sensitive => true
|
34
|
+
validation = Validatable::ValidatesConfirmationOf.new stub, :username, :case_sensitive => true
|
35
35
|
assert_equal false, validation.valid?(stub(:username => 'something', :username_confirmation => nil))
|
36
36
|
end
|
37
37
|
|
38
38
|
test "valid confirmation if value and confirmation are nil with case sensitive true" do
|
39
|
-
validation = Validatable::ValidatesConfirmationOf.new :username, :case_sensitive => true
|
39
|
+
validation = Validatable::ValidatesConfirmationOf.new stub, :username, :case_sensitive => true
|
40
40
|
assert_equal true, validation.valid?(stub(:username => nil, :username_confirmation => nil))
|
41
41
|
end
|
42
42
|
|
43
43
|
test "invalid confirmation if value is nil and confirmation is not with case sensitive false" do
|
44
|
-
validation = Validatable::ValidatesConfirmationOf.new :username, :case_sensitive => false
|
44
|
+
validation = Validatable::ValidatesConfirmationOf.new stub, :username, :case_sensitive => false
|
45
45
|
assert_equal false, validation.valid?(stub(:username => nil, :username_confirmation => 'something'))
|
46
46
|
end
|
47
47
|
|
48
48
|
test "invalid confirmation if confirmation is nil and value is not with case sensitive false" do
|
49
|
-
validation = Validatable::ValidatesConfirmationOf.new :username, :case_sensitive => false
|
49
|
+
validation = Validatable::ValidatesConfirmationOf.new stub, :username, :case_sensitive => false
|
50
50
|
assert_equal false, validation.valid?(stub(:username => 'something', :username_confirmation => nil))
|
51
51
|
end
|
52
52
|
|
53
53
|
test "valid confirmation if value and confirmation are nil with case sensitive false" do
|
54
|
-
validation = Validatable::ValidatesConfirmationOf.new :username, :case_sensitive => false
|
54
|
+
validation = Validatable::ValidatesConfirmationOf.new stub, :username, :case_sensitive => false
|
55
55
|
assert_equal true, validation.valid?(stub(:username => nil, :username_confirmation => nil))
|
56
56
|
end
|
57
57
|
|
58
58
|
expect true do
|
59
59
|
options = { :message => nil, :if => nil, :times => nil, :level => nil, :groups => nil, :case_sensitive => nil }
|
60
|
-
Validatable::ValidatesConfirmationOf.new(:test).must_understand(options)
|
60
|
+
Validatable::ValidatesConfirmationOf.new(stub, :test).must_understand(options)
|
61
61
|
end
|
62
62
|
|
63
63
|
end
|
@@ -2,34 +2,34 @@ require File.expand_path(File.dirname(__FILE__) + '/../test_helper')
|
|
2
2
|
|
3
3
|
class ValidatesFormatOfTest < Test::Unit::TestCase
|
4
4
|
test "when attribute value does not match the given regex, then valid is false" do
|
5
|
-
validation = Validatable::ValidatesFormatOf.new :name, :with => /book/
|
5
|
+
validation = Validatable::ValidatesFormatOf.new stub, :name, :with => /book/
|
6
6
|
assert_equal false, validation.valid?(stub_everything)
|
7
7
|
end
|
8
8
|
|
9
9
|
test "when attribute value does match the given regex, then valid is true" do
|
10
|
-
validation = Validatable::ValidatesFormatOf.new :name, :with => /book/
|
10
|
+
validation = Validatable::ValidatesFormatOf.new stub, :name, :with => /book/
|
11
11
|
assert_equal true, validation.valid?(stub(:name=>"book"))
|
12
12
|
end
|
13
13
|
|
14
14
|
test "when attribute value is an integer it should be converted to a string before matching" do
|
15
|
-
validation = Validatable::ValidatesFormatOf.new :age, :with => /14/
|
15
|
+
validation = Validatable::ValidatesFormatOf.new stub, :age, :with => /14/
|
16
16
|
assert_equal true, validation.valid?(stub(:age=>14))
|
17
17
|
end
|
18
18
|
|
19
19
|
test "when no with is given, then an error is raised during construction" do
|
20
20
|
assert_raises ArgumentError do
|
21
|
-
validation = Validatable::ValidatesFormatOf.new :age
|
21
|
+
validation = Validatable::ValidatesFormatOf.new stub, :age
|
22
22
|
end
|
23
23
|
end
|
24
24
|
|
25
25
|
expect true do
|
26
|
-
options = [:message, :if, :times, :level, :groups, :with]
|
27
|
-
Validatable::ValidatesFormatOf.new(:test, options.to_blank_options_hash).must_understand(options.to_blank_options_hash)
|
26
|
+
options = [:message, :if, :times, :level, :groups, :with, :key]
|
27
|
+
Validatable::ValidatesFormatOf.new(stub, :test, options.to_blank_options_hash).must_understand(options.to_blank_options_hash)
|
28
28
|
end
|
29
29
|
|
30
30
|
expect true do
|
31
31
|
options = [:with]
|
32
|
-
Validatable::ValidatesFormatOf.new(:name, options.to_blank_options_hash).requires(options.to_blank_options_hash)
|
32
|
+
Validatable::ValidatesFormatOf.new(stub, :name, options.to_blank_options_hash).requires(options.to_blank_options_hash)
|
33
33
|
end
|
34
34
|
|
35
35
|
end
|
@@ -3,74 +3,74 @@ require File.expand_path(File.dirname(__FILE__) + '/../test_helper')
|
|
3
3
|
module Unit
|
4
4
|
class ValidatesLengthOfTest < Test::Unit::TestCase
|
5
5
|
expect false do
|
6
|
-
validation = Validatable::ValidatesLengthOf.new :username, :maximum => 8
|
6
|
+
validation = Validatable::ValidatesLengthOf.new stub, :username, :maximum => 8
|
7
7
|
validation.valid?(stub(:username=>"usernamefdfd"))
|
8
8
|
end
|
9
9
|
|
10
10
|
test "min length" do
|
11
|
-
validation = Validatable::ValidatesLengthOf.new :username, :minimum => 2
|
11
|
+
validation = Validatable::ValidatesLengthOf.new stub, :username, :minimum => 2
|
12
12
|
instance = stub(:username=>"u")
|
13
13
|
assert_equal false, validation.valid?(instance)
|
14
14
|
end
|
15
15
|
|
16
16
|
test "valid length" do
|
17
|
-
validation = Validatable::ValidatesLengthOf.new :username, :minimum => 2, :maximum => 8
|
17
|
+
validation = Validatable::ValidatesLengthOf.new stub, :username, :minimum => 2, :maximum => 8
|
18
18
|
instance = stub(:username=>"udfgdf")
|
19
19
|
assert_equal true, validation.valid?(instance)
|
20
20
|
end
|
21
21
|
|
22
22
|
test "is length is false" do
|
23
|
-
validation = Validatable::ValidatesLengthOf.new :username, :is => 2
|
23
|
+
validation = Validatable::ValidatesLengthOf.new stub, :username, :is => 2
|
24
24
|
instance = stub(:username=>"u")
|
25
25
|
assert_equal false, validation.valid?(instance)
|
26
26
|
end
|
27
27
|
|
28
28
|
test "is length is true" do
|
29
|
-
validation = Validatable::ValidatesLengthOf.new :username, :is => 2
|
29
|
+
validation = Validatable::ValidatesLengthOf.new stub, :username, :is => 2
|
30
30
|
instance = stub(:username=>"uu")
|
31
31
|
assert_equal true, validation.valid?(instance)
|
32
32
|
end
|
33
33
|
|
34
34
|
test "within lower bound is true" do
|
35
|
-
validation = Validatable::ValidatesLengthOf.new :username, :within => 2..4
|
35
|
+
validation = Validatable::ValidatesLengthOf.new stub, :username, :within => 2..4
|
36
36
|
instance = stub(:username => "aa")
|
37
37
|
assert_equal true, validation.valid?(instance)
|
38
38
|
end
|
39
39
|
|
40
40
|
test "within outside lower bound is false" do
|
41
|
-
validation = Validatable::ValidatesLengthOf.new :username, :within => 2..4
|
41
|
+
validation = Validatable::ValidatesLengthOf.new stub, :username, :within => 2..4
|
42
42
|
instance = stub(:username => "a")
|
43
43
|
assert_equal false, validation.valid?(instance)
|
44
44
|
end
|
45
45
|
|
46
46
|
test "within upper bound is true" do
|
47
|
-
validation = Validatable::ValidatesLengthOf.new :username, :within => 2..4
|
47
|
+
validation = Validatable::ValidatesLengthOf.new stub, :username, :within => 2..4
|
48
48
|
instance = stub(:username => "aaaa")
|
49
49
|
assert_equal true, validation.valid?(instance)
|
50
50
|
end
|
51
51
|
|
52
52
|
test "within outside upper bound is false" do
|
53
|
-
validation = Validatable::ValidatesLengthOf.new :username, :within => 2..4
|
53
|
+
validation = Validatable::ValidatesLengthOf.new stub, :username, :within => 2..4
|
54
54
|
instance = stub(:username => "aaaaa")
|
55
55
|
assert_equal false, validation.valid?(instance)
|
56
56
|
end
|
57
57
|
|
58
58
|
test "given nil value, should not be valid" do
|
59
|
-
validation = Validatable::ValidatesLengthOf.new :username, :within => 2..4
|
59
|
+
validation = Validatable::ValidatesLengthOf.new stub, :username, :within => 2..4
|
60
60
|
instance = stub(:username => nil)
|
61
61
|
assert_equal false, validation.valid?(instance)
|
62
62
|
end
|
63
63
|
|
64
64
|
|
65
65
|
test "given allow_nil is true, nil value should be valid" do
|
66
|
-
validation = Validatable::ValidatesLengthOf.new :username, :within => 2..4, :allow_nil => true
|
66
|
+
validation = Validatable::ValidatesLengthOf.new stub, :username, :within => 2..4, :allow_nil => true
|
67
67
|
instance = stub(:username => nil)
|
68
68
|
assert_equal true, validation.valid?(instance)
|
69
69
|
end
|
70
70
|
|
71
71
|
expect true do
|
72
72
|
options = [:message, :if, :times, :level, :groups, :maximum, :minimum, :is, :within, :allow_nil]
|
73
|
-
Validatable::ValidatesLengthOf.new(:test).must_understand(options.to_blank_options_hash)
|
73
|
+
Validatable::ValidatesLengthOf.new(stub, :test).must_understand(options.to_blank_options_hash)
|
74
74
|
end
|
75
75
|
|
76
76
|
end
|
@@ -4,50 +4,50 @@ module Unit
|
|
4
4
|
class ValidatesNumericalityOfTest < Test::Unit::TestCase
|
5
5
|
|
6
6
|
test "when the value is nil then valid is false" do
|
7
|
-
validation = Validatable::ValidatesNumericalityOf.new :nothing
|
7
|
+
validation = Validatable::ValidatesNumericalityOf.new stub, :nothing
|
8
8
|
instance = stub(:nothing => nil)
|
9
9
|
assert_equal false, validation.valid?(instance)
|
10
10
|
end
|
11
11
|
|
12
12
|
test "when value is an integer then valid is true" do
|
13
|
-
validation = Validatable::ValidatesNumericalityOf.new :some_int
|
13
|
+
validation = Validatable::ValidatesNumericalityOf.new stub, :some_int
|
14
14
|
instance = stub(:some_int => 50)
|
15
15
|
assert_equal true, validation.valid?(instance)
|
16
16
|
end
|
17
17
|
|
18
18
|
test "when value is an decimal then valid is true" do
|
19
|
-
validation = Validatable::ValidatesNumericalityOf.new :some_decimal
|
19
|
+
validation = Validatable::ValidatesNumericalityOf.new stub, :some_decimal
|
20
20
|
instance = stub(:some_decimal => 1.23)
|
21
21
|
assert_equal true, validation.valid?(instance)
|
22
22
|
end
|
23
23
|
|
24
24
|
test "when value is a decimal but only_integer is true, then valid is false" do
|
25
|
-
validation = Validatable::ValidatesNumericalityOf.new :some_decimal, :only_integer => true
|
25
|
+
validation = Validatable::ValidatesNumericalityOf.new stub, :some_decimal, :only_integer => true
|
26
26
|
instance = stub(:some_decimal => 1.23)
|
27
27
|
assert_equal false, validation.valid?(instance)
|
28
28
|
end
|
29
29
|
|
30
30
|
test "when value is an integer string and only_integer is true, then valid is true" do
|
31
|
-
validation = Validatable::ValidatesNumericalityOf.new :some_negative_number, :only_integer => true
|
31
|
+
validation = Validatable::ValidatesNumericalityOf.new stub, :some_negative_number, :only_integer => true
|
32
32
|
instance = stub(:some_negative_number => "-1")
|
33
33
|
assert_equal true, validation.valid?(instance)
|
34
34
|
end
|
35
35
|
|
36
36
|
test "when value has non numeric characters then valid is false" do
|
37
|
-
validation = Validatable::ValidatesNumericalityOf.new :some_non_numeric
|
37
|
+
validation = Validatable::ValidatesNumericalityOf.new stub, :some_non_numeric
|
38
38
|
instance = stub(:some_non_numeric => "50F")
|
39
39
|
assert_equal false, validation.valid?(instance)
|
40
40
|
end
|
41
41
|
|
42
42
|
test "when value is a string with multiple dots then valid is false" do
|
43
|
-
validation = Validatable::ValidatesNumericalityOf.new :multiple_dots
|
43
|
+
validation = Validatable::ValidatesNumericalityOf.new stub, :multiple_dots
|
44
44
|
instance = stub(:multiple_dots => "50.0.0")
|
45
45
|
assert_equal false, validation.valid?(instance)
|
46
46
|
end
|
47
47
|
|
48
48
|
expect true do
|
49
49
|
options = [:message, :if, :times, :level, :groups, :only_integer]
|
50
|
-
Validatable::ValidatesNumericalityOf.new(:test).must_understand(options.to_blank_options_hash)
|
50
|
+
Validatable::ValidatesNumericalityOf.new(stub, :test).must_understand(options.to_blank_options_hash)
|
51
51
|
end
|
52
52
|
|
53
53
|
end
|
@@ -2,22 +2,23 @@ require File.expand_path(File.dirname(__FILE__) + '/../test_helper')
|
|
2
2
|
|
3
3
|
class ValidatesPresenceOfTest < Test::Unit::TestCase
|
4
4
|
test "when attribute value does not match the given regex, then valid is false" do
|
5
|
-
validation = Validatable::ValidatesPresenceOf.new :name
|
5
|
+
validation = Validatable::ValidatesPresenceOf.new stub, :name
|
6
6
|
assert_equal false, validation.valid?(stub_everything)
|
7
7
|
end
|
8
8
|
|
9
9
|
test "when attribute value does match the given regex, then valid is true" do
|
10
|
-
validation = Validatable::ValidatesPresenceOf.new :name
|
10
|
+
validation = Validatable::ValidatesPresenceOf.new stub, :name
|
11
11
|
assert_equal true, validation.valid?(stub(:name=>"book"))
|
12
12
|
end
|
13
13
|
|
14
14
|
test "when given a true value which is not a String, then valid is true" do
|
15
|
-
validation = Validatable::ValidatesPresenceOf.new :employee
|
15
|
+
validation = Validatable::ValidatesPresenceOf.new stub, :employee
|
16
16
|
assert_equal true, validation.valid?(stub(:employee => stub(:nil? => false)))
|
17
17
|
end
|
18
18
|
|
19
19
|
expect true do
|
20
|
-
|
20
|
+
options = {:message => nil, :if => nil, :times => nil, :level => nil, :groups => nil}
|
21
|
+
Validatable::ValidatesPresenceOf.new(stub, :test).must_understand(options)
|
21
22
|
end
|
22
23
|
|
23
24
|
end
|
@@ -2,29 +2,29 @@ require File.expand_path(File.dirname(__FILE__) + '/../test_helper')
|
|
2
2
|
|
3
3
|
class ValidatesTrueForTest < Test::Unit::TestCase
|
4
4
|
test "when block returns false for attribute value, then valid is false" do
|
5
|
-
validation = Validatable::ValidatesTrueFor.new :name, :logic => lambda { false }
|
5
|
+
validation = Validatable::ValidatesTrueFor.new stub, :name, :logic => lambda { false }
|
6
6
|
assert_equal false, validation.valid?(stub_everything)
|
7
7
|
end
|
8
8
|
|
9
9
|
test "when block returns true for attribute value, then valid is false" do
|
10
|
-
validation = Validatable::ValidatesTrueFor.new :name, :logic => lambda { true }
|
10
|
+
validation = Validatable::ValidatesTrueFor.new stub, :name, :logic => lambda { true }
|
11
11
|
assert_equal true, validation.valid?(stub_everything)
|
12
12
|
end
|
13
13
|
|
14
14
|
test "when no logic is given, then an error is raised during construction" do
|
15
15
|
assert_raises ArgumentError do
|
16
|
-
validation = Validatable::ValidatesTrueFor.new :age
|
16
|
+
validation = Validatable::ValidatesTrueFor.new stub, :age
|
17
17
|
end
|
18
18
|
end
|
19
19
|
|
20
20
|
expect true do
|
21
|
-
options = [:message, :if, :times, :level, :groups, :logic]
|
22
|
-
Validatable::ValidatesTrueFor.new(:name, options.to_blank_options_hash).must_understand(options.to_blank_options_hash)
|
21
|
+
options = [:message, :if, :times, :level, :groups, :logic, :key]
|
22
|
+
Validatable::ValidatesTrueFor.new(stub, :name, options.to_blank_options_hash).must_understand(options.to_blank_options_hash)
|
23
23
|
end
|
24
24
|
|
25
25
|
expect true do
|
26
26
|
options = [:logic]
|
27
|
-
Validatable::ValidatesTrueFor.new(:name, options.to_blank_options_hash).requires(options.to_blank_options_hash)
|
27
|
+
Validatable::ValidatesTrueFor.new(stub, :name, options.to_blank_options_hash).requires(options.to_blank_options_hash)
|
28
28
|
end
|
29
29
|
|
30
30
|
end
|
@@ -2,50 +2,61 @@ require File.expand_path(File.dirname(__FILE__) + '/../test_helper')
|
|
2
2
|
|
3
3
|
class ValidationBaseTest < Test::Unit::TestCase
|
4
4
|
expect true do
|
5
|
-
validation = Validatable::ValidationBase.new :base
|
5
|
+
validation = Validatable::ValidationBase.new stub, :base
|
6
6
|
validation.should_validate? Object.new
|
7
7
|
end
|
8
8
|
|
9
9
|
expect true do
|
10
|
-
validation = Validatable::ValidationBase.new :base, :times => 1
|
11
|
-
validation.validate_this_time?
|
10
|
+
validation = Validatable::ValidationBase.new stub_everything, :base, :times => 1
|
11
|
+
validation.validate_this_time?(stub(:times_validated => 0))
|
12
12
|
end
|
13
13
|
|
14
14
|
expect true do
|
15
|
-
validation = Validatable::ValidationBase.new :base
|
16
|
-
validation.validate_this_time?
|
15
|
+
validation = Validatable::ValidationBase.new stub, :base
|
16
|
+
validation.validate_this_time?(nil)
|
17
17
|
end
|
18
18
|
|
19
19
|
expect true do
|
20
|
-
validation = Validatable::ValidationBase.new :base, :times => 2
|
21
|
-
validation.validate_this_time?
|
22
|
-
validation.validate_this_time?
|
20
|
+
validation = Validatable::ValidationBase.new stub_everything, :base, :times => 2
|
21
|
+
validation.validate_this_time?(stub(:times_validated => 1))
|
23
22
|
end
|
24
23
|
|
24
|
+
expect "Validatable::ValidationBase:base:key" do
|
25
|
+
validation = Validatable::ValidationBase.new stub_everything, :base, :times => 1, :key => "key"
|
26
|
+
validation.key
|
27
|
+
end
|
28
|
+
|
29
|
+
expect "Validatable::ValidationBase:base:key" do
|
30
|
+
validation = Validatable::ValidationBase.new stub_everything, :base, :times => 1
|
31
|
+
validation.key
|
32
|
+
end
|
33
|
+
|
25
34
|
expect false do
|
26
|
-
validation = Validatable::ValidationBase.new :base, :times => 1
|
27
|
-
validation.validate_this_time?
|
28
|
-
validation.validate_this_time?
|
35
|
+
validation = Validatable::ValidationBase.new stub_everything, :base, :times => 1
|
36
|
+
validation.validate_this_time?(stub(:times_validated => 1))
|
29
37
|
end
|
30
38
|
|
31
39
|
expect 1 do
|
32
|
-
validation = Validatable::ValidationBase.new :base
|
40
|
+
validation = Validatable::ValidationBase.new stub_everything, :base
|
33
41
|
validation.level
|
34
42
|
end
|
35
43
|
|
44
|
+
expect ArgumentError do
|
45
|
+
Validatable::ValidationBase.new stub(:validation_keys_include? => true), :base, :times => 1
|
46
|
+
end
|
47
|
+
|
36
48
|
expect "some message 100" do
|
37
|
-
validation = Validatable::ValidationBase.new :base, :message => lambda { "some message #{a_method}" }
|
49
|
+
validation = Validatable::ValidationBase.new stub, :base, :message => lambda { "some message #{a_method}" }
|
38
50
|
validation.message(stub(:a_method=>'100'))
|
39
51
|
end
|
40
52
|
|
41
|
-
|
42
|
-
|
43
|
-
Validatable::ValidationBase.new(:base).must_understand(:foo => 1, :bar => 2)
|
44
|
-
end
|
53
|
+
expect ArgumentError do
|
54
|
+
Validatable::ValidationBase.new(stub, :base).must_understand(:foo => 1, :bar => 2)
|
45
55
|
end
|
46
56
|
|
47
57
|
expect true do
|
48
|
-
|
58
|
+
options = {:message => nil, :if => nil, :times => nil, :level => nil, :groups => nil, :key => nil}
|
59
|
+
Validatable::ValidationBase.new(stub, :base).must_understand(options)
|
49
60
|
end
|
50
61
|
|
51
62
|
end
|
metadata
CHANGED
@@ -1,10 +1,10 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
|
-
rubygems_version: 0.9.
|
2
|
+
rubygems_version: 0.9.2
|
3
3
|
specification_version: 1
|
4
4
|
name: validatable
|
5
5
|
version: !ruby/object:Gem::Version
|
6
|
-
version: 1.
|
7
|
-
date: 2007-
|
6
|
+
version: 1.4.0
|
7
|
+
date: 2007-06-02 00:00:00 -04:00
|
8
8
|
summary: Validatable is a library for adding validations.
|
9
9
|
require_paths:
|
10
10
|
- lib
|