dm-validations 1.1.0 → 1.2.0.rc1
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/Gemfile +8 -8
- data/Rakefile +2 -2
- data/VERSION +1 -1
- data/dm-validations.gemspec +29 -139
- data/lib/dm-validations.rb +51 -103
- data/lib/dm-validations/auto_validate.rb +104 -61
- data/lib/dm-validations/context.rb +66 -0
- data/lib/dm-validations/contextual_validators.rb +164 -53
- data/lib/dm-validations/formats/email.rb +41 -23
- data/lib/dm-validations/formats/url.rb +6 -1
- data/lib/dm-validations/support/object.rb +13 -0
- data/lib/dm-validations/validation_errors.rb +27 -19
- data/lib/dm-validations/validators/absent_field_validator.rb +11 -11
- data/lib/dm-validations/validators/acceptance_validator.rb +15 -13
- data/lib/dm-validations/validators/block_validator.rb +12 -11
- data/lib/dm-validations/validators/confirmation_validator.rb +23 -16
- data/lib/dm-validations/validators/format_validator.rb +45 -23
- data/lib/dm-validations/validators/generic_validator.rb +85 -38
- data/lib/dm-validations/validators/length_validator.rb +61 -26
- data/lib/dm-validations/validators/method_validator.rb +13 -17
- data/lib/dm-validations/validators/numeric_validator.rb +35 -35
- data/lib/dm-validations/validators/primitive_validator.rb +11 -12
- data/lib/dm-validations/validators/required_field_validator.rb +11 -13
- data/lib/dm-validations/validators/uniqueness_validator.rb +15 -14
- data/lib/dm-validations/validators/within_validator.rb +30 -12
- data/spec/fixtures/bill_of_landing.rb +5 -0
- data/spec/fixtures/llama_spaceship.rb +15 -0
- data/spec/integration/automatic_validation/custom_messages_for_inferred_validation_spec.rb +10 -0
- data/spec/integration/automatic_validation/disabling_inferred_validation_spec.rb +8 -0
- data/spec/integration/automatic_validation/inferred_length_validation_spec.rb +8 -0
- data/spec/integration/automatic_validation/inferred_uniqueness_validation_spec.rb +6 -2
- data/spec/integration/automatic_validation/inferred_within_validation_spec.rb +6 -0
- data/spec/integration/datamapper_models/association_validation_spec.rb +5 -2
- data/spec/integration/dirty_attributes/dirty_attributes_spec.rb +13 -0
- data/spec/integration/format_validator/email_format_validator_spec.rb +13 -5
- data/spec/integration/format_validator/url_format_validator_spec.rb +28 -2
- data/spec/integration/required_field_validator/association_spec.rb +5 -1
- data/spec/public/resource_spec.rb +2 -2
- data/spec/spec_helper.rb +1 -1
- data/spec/unit/contextual_validators/emptiness_spec.rb +10 -10
- data/spec/unit/contextual_validators/execution_spec.rb +4 -4
- data/spec/unit/validators/within_validator_spec.rb +23 -0
- metadata +81 -146
- data/lib/dm-validations/support/context.rb +0 -93
@@ -1,12 +1,11 @@
|
|
1
1
|
# -*- coding: utf-8 -*-
|
2
2
|
module DataMapper
|
3
3
|
module Validations
|
4
|
-
|
5
4
|
# All validators extend this base class. Validators must:
|
6
5
|
#
|
7
|
-
# * Implement the initialize method to capture its parameters, also
|
8
|
-
# super to have this parent class capture the optional,
|
9
|
-
# :unless parameters.
|
6
|
+
# * Implement the initialize method to capture its parameters, also
|
7
|
+
# calling super to have this parent class capture the optional,
|
8
|
+
# general :if and :unless parameters.
|
10
9
|
# * Implement the call method, returning true or false. The call method
|
11
10
|
# provides the validation logic.
|
12
11
|
#
|
@@ -17,16 +16,23 @@ module DataMapper
|
|
17
16
|
attr_accessor :if_clause, :unless_clause
|
18
17
|
attr_reader :field_name, :options, :humanized_field_name
|
19
18
|
|
20
|
-
# Construct a validator. Capture the :if and :unless clauses when
|
19
|
+
# Construct a validator. Capture the :if and :unless clauses when
|
20
|
+
# present.
|
21
|
+
#
|
22
|
+
# @param [String, Symbol] field
|
23
|
+
# The property specified for validation.
|
24
|
+
#
|
25
|
+
# @option [Symbol, Proc] :if
|
26
|
+
# The name of a method or a Proc to call to determine if the
|
27
|
+
# validation should occur.
|
21
28
|
#
|
22
|
-
# @
|
29
|
+
# @option [Symbol, Proc] :unless
|
30
|
+
# The name of a method or a Proc to call to determine if the
|
31
|
+
# validation should not occur.
|
23
32
|
#
|
24
|
-
# @
|
25
|
-
#
|
26
|
-
#
|
27
|
-
# determine if the validation should not occur
|
28
|
-
# All additional key/value pairs are passed through to the validator
|
29
|
-
# that is sub-classing this GenericValidator
|
33
|
+
# @note
|
34
|
+
# All additional key/value pairs are passed through to the validator
|
35
|
+
# that is sub-classing this GenericValidator
|
30
36
|
#
|
31
37
|
def initialize(field_name, options = {})
|
32
38
|
@field_name = field_name
|
@@ -36,26 +42,34 @@ module DataMapper
|
|
36
42
|
@humanized_field_name = DataMapper::Inflector.humanize(@field_name)
|
37
43
|
end
|
38
44
|
|
39
|
-
# Add an error message to a target resource. If the error corresponds
|
40
|
-
# specific field of the resource, add it to that field,
|
41
|
-
# as a :general message.
|
45
|
+
# Add an error message to a target resource. If the error corresponds
|
46
|
+
# to a specific field of the resource, add it to that field,
|
47
|
+
# otherwise add it as a :general message.
|
42
48
|
#
|
43
|
-
# @param
|
44
|
-
#
|
45
|
-
# @param <Symbol> field_name the name of the field that caused the error
|
49
|
+
# @param [Object] target
|
50
|
+
# The resource that has the error.
|
46
51
|
#
|
47
|
-
#
|
52
|
+
# @param [String] message
|
53
|
+
# The message to add.
|
54
|
+
#
|
55
|
+
# @param [Symbol] field_name
|
56
|
+
# The name of the field that caused the error.
|
48
57
|
#
|
49
58
|
def add_error(target, message, field_name = :general)
|
59
|
+
# TODO: should the field_name for a general message be :default???
|
50
60
|
target.errors.add(field_name, message)
|
51
61
|
end
|
52
62
|
|
53
|
-
# Call the validator. "call" is used so the operation is BoundMethod
|
54
|
-
# Block compatible. This must be implemented in all concrete
|
63
|
+
# Call the validator. "call" is used so the operation is BoundMethod
|
64
|
+
# and Block compatible. This must be implemented in all concrete
|
65
|
+
# classes.
|
66
|
+
#
|
67
|
+
# @param [Object] target
|
68
|
+
# The resource that the validator must be called against.
|
69
|
+
#
|
70
|
+
# @return [Boolean]
|
71
|
+
# true if valid, otherwise false.
|
55
72
|
#
|
56
|
-
# @param <Object> target the resource that the validator must be called
|
57
|
-
# against
|
58
|
-
# @return <Boolean> true if valid, otherwise false
|
59
73
|
def call(target)
|
60
74
|
raise NotImplementedError, "#{self.class}#call must be implemented"
|
61
75
|
end
|
@@ -64,26 +78,37 @@ module DataMapper
|
|
64
78
|
# target by evaluating the :if and :unless clauses
|
65
79
|
# optionally passed while specifying any validator.
|
66
80
|
#
|
67
|
-
# @param
|
68
|
-
#
|
81
|
+
# @param [Object] target
|
82
|
+
# The resource that we check against.
|
83
|
+
#
|
84
|
+
# @return [Boolean]
|
85
|
+
# true if should be run, otherwise false.
|
86
|
+
#
|
87
|
+
# @api private
|
69
88
|
def execute?(target)
|
70
89
|
if unless_clause = self.unless_clause
|
71
|
-
|
72
|
-
|
90
|
+
!evaluate_conditional_clause(target, unless_clause)
|
91
|
+
elsif if_clause = self.if_clause
|
92
|
+
evaluate_conditional_clause(target, if_clause)
|
93
|
+
else
|
94
|
+
true
|
73
95
|
end
|
96
|
+
end
|
74
97
|
|
75
|
-
|
76
|
-
|
77
|
-
|
98
|
+
# @api private
|
99
|
+
def evaluate_conditional_clause(target, clause)
|
100
|
+
if clause.kind_of?(Symbol)
|
101
|
+
target.__send__(clause)
|
102
|
+
elsif clause.respond_to?(:call)
|
103
|
+
clause.call(target)
|
78
104
|
end
|
79
|
-
|
80
|
-
true
|
81
105
|
end
|
82
106
|
|
83
107
|
# Set the default value for allow_nil and allow_blank
|
84
108
|
#
|
85
109
|
# @param [Boolean] default value
|
86
|
-
#
|
110
|
+
#
|
111
|
+
# @api private
|
87
112
|
def set_optional_by_default(default = true)
|
88
113
|
[ :allow_nil, :allow_blank ].each do |key|
|
89
114
|
@options[key] = true unless options.key?(key)
|
@@ -94,11 +119,17 @@ module DataMapper
|
|
94
119
|
# Note that allowing blank without explicitly denying nil allows nil
|
95
120
|
# values, since nil.blank? is true.
|
96
121
|
#
|
97
|
-
# @param
|
98
|
-
#
|
122
|
+
# @param [Object] value
|
123
|
+
# The value to test.
|
124
|
+
#
|
125
|
+
# @return [Boolean]
|
126
|
+
# true if blank/nil is allowed, and the value is blank/nil.
|
127
|
+
#
|
128
|
+
# @api private
|
99
129
|
def optional?(value)
|
100
130
|
if value.nil?
|
101
|
-
@options[:allow_nil] ||
|
131
|
+
@options[:allow_nil] ||
|
132
|
+
(@options[:allow_blank] && !@options.has_key?(:allow_nil))
|
102
133
|
elsif DataMapper::Ext.blank?(value)
|
103
134
|
@options[:allow_blank]
|
104
135
|
end
|
@@ -124,7 +155,7 @@ module DataMapper
|
|
124
155
|
self.field_name == other.field_name &&
|
125
156
|
self.if_clause == other.if_clause &&
|
126
157
|
self.unless_clause == other.unless_clause &&
|
127
|
-
self.
|
158
|
+
self.options == other.options
|
128
159
|
end
|
129
160
|
|
130
161
|
def inspect
|
@@ -132,6 +163,22 @@ module DataMapper
|
|
132
163
|
end
|
133
164
|
|
134
165
|
alias_method :to_s, :inspect
|
166
|
+
|
167
|
+
private
|
168
|
+
|
169
|
+
# Get the corresponding Resource property, if it exists.
|
170
|
+
#
|
171
|
+
# Note: DataMapper validations can be used on non-DataMapper resources.
|
172
|
+
# In such cases, the return value will be nil.
|
173
|
+
#
|
174
|
+
# @api private
|
175
|
+
def get_resource_property(resource, property_name)
|
176
|
+
model = resource.model if resource.respond_to?(:model)
|
177
|
+
repository = resource.repository if model
|
178
|
+
properties = model.properties(repository.name) if model
|
179
|
+
properties[property_name] if properties
|
180
|
+
end
|
181
|
+
|
135
182
|
end # class GenericValidator
|
136
183
|
end # module Validations
|
137
184
|
end # module DataMapper
|
@@ -6,11 +6,10 @@ module DataMapper
|
|
6
6
|
#
|
7
7
|
# @param [Symbol] field_name
|
8
8
|
# the name of the field to validate
|
9
|
+
#
|
9
10
|
# @param [Hash] options
|
10
11
|
# the validator options
|
11
12
|
#
|
12
|
-
# @return [undefined]
|
13
|
-
#
|
14
13
|
# @api semipublic
|
15
14
|
def initialize(field_name, options)
|
16
15
|
super
|
@@ -48,7 +47,6 @@ module DataMapper
|
|
48
47
|
return true unless error_message = error_message_for(value)
|
49
48
|
|
50
49
|
add_error(target, error_message, field_name)
|
51
|
-
|
52
50
|
false
|
53
51
|
end
|
54
52
|
|
@@ -114,7 +112,12 @@ module DataMapper
|
|
114
112
|
# @api private
|
115
113
|
def validate_equals(length)
|
116
114
|
return if length == @equal
|
117
|
-
|
115
|
+
|
116
|
+
ValidationErrors.default_error_message(
|
117
|
+
:wrong_length,
|
118
|
+
humanized_field_name,
|
119
|
+
@equal
|
120
|
+
)
|
118
121
|
end
|
119
122
|
|
120
123
|
# Validate the value length is within expected range
|
@@ -128,7 +131,13 @@ module DataMapper
|
|
128
131
|
# @api private
|
129
132
|
def validate_range(length)
|
130
133
|
return if @range.include?(length)
|
131
|
-
|
134
|
+
|
135
|
+
ValidationErrors.default_error_message(
|
136
|
+
:length_between,
|
137
|
+
humanized_field_name,
|
138
|
+
@range.min,
|
139
|
+
@range.max
|
140
|
+
)
|
132
141
|
end
|
133
142
|
|
134
143
|
# Validate the minimum expected value length
|
@@ -142,7 +151,12 @@ module DataMapper
|
|
142
151
|
# @api private
|
143
152
|
def validate_min(length)
|
144
153
|
return if length >= @min
|
145
|
-
|
154
|
+
|
155
|
+
ValidationErrors.default_error_message(
|
156
|
+
:too_short,
|
157
|
+
humanized_field_name,
|
158
|
+
@min
|
159
|
+
)
|
146
160
|
end
|
147
161
|
|
148
162
|
# Validate the maximum expected value length
|
@@ -156,7 +170,12 @@ module DataMapper
|
|
156
170
|
# @api private
|
157
171
|
def validate_max(length)
|
158
172
|
return if length <= @max
|
159
|
-
|
173
|
+
|
174
|
+
ValidationErrors.default_error_message(
|
175
|
+
:too_long,
|
176
|
+
humanized_field_name,
|
177
|
+
@max
|
178
|
+
)
|
160
179
|
end
|
161
180
|
|
162
181
|
end # class LengthValidator
|
@@ -168,22 +187,40 @@ module DataMapper
|
|
168
187
|
# greater than or within a certain range (depending upon the options
|
169
188
|
# you specify).
|
170
189
|
#
|
171
|
-
# @option :allow_nil
|
172
|
-
#
|
173
|
-
#
|
174
|
-
#
|
175
|
-
#
|
176
|
-
#
|
177
|
-
#
|
178
|
-
#
|
179
|
-
#
|
180
|
-
#
|
181
|
-
# @option
|
182
|
-
#
|
183
|
-
#
|
184
|
-
# @option
|
185
|
-
#
|
186
|
-
#
|
190
|
+
# @option [Boolean] :allow_nil (true)
|
191
|
+
# true or false.
|
192
|
+
#
|
193
|
+
# @option [Boolean] :allow_blank (true)
|
194
|
+
# true or false.
|
195
|
+
#
|
196
|
+
# @option [Boolean] :minimum
|
197
|
+
# Ensures that the attribute's length is greater than or equal to
|
198
|
+
# the supplied value.
|
199
|
+
#
|
200
|
+
# @option [Boolean] :min
|
201
|
+
# Alias for :minimum.
|
202
|
+
#
|
203
|
+
# @option [Boolean] :maximum
|
204
|
+
# Ensures the attribute's length is less than or equal to the
|
205
|
+
# supplied value.
|
206
|
+
#
|
207
|
+
# @option [Boolean] :max
|
208
|
+
# Alias for :maximum.
|
209
|
+
#
|
210
|
+
# @option [Boolean] :equals
|
211
|
+
# Ensures the attribute's length is equal to the supplied value.
|
212
|
+
#
|
213
|
+
# @option [Boolean] :is
|
214
|
+
# Alias for :equals.
|
215
|
+
#
|
216
|
+
# @option [Range] :in
|
217
|
+
# Given a Range, ensures that the attributes length is include?'ed
|
218
|
+
# in the Range.
|
219
|
+
#
|
220
|
+
# @option [Range] :within
|
221
|
+
# Alias for :in.
|
222
|
+
#
|
223
|
+
# @example Usage
|
187
224
|
# require 'dm-validations'
|
188
225
|
#
|
189
226
|
# class Page
|
@@ -203,12 +240,10 @@ module DataMapper
|
|
203
240
|
# # just_right is between 1 and 10 (inclusive of both 1 and 10)
|
204
241
|
#
|
205
242
|
def validates_length_of(*fields)
|
206
|
-
|
207
|
-
add_validator_to_context(opts, fields, DataMapper::Validations::LengthValidator)
|
243
|
+
validators.add(LengthValidator, *fields)
|
208
244
|
end
|
209
245
|
|
210
246
|
deprecate :validates_length, :validates_length_of
|
211
|
-
|
212
247
|
end # module ValidatesLength
|
213
248
|
end # module Validations
|
214
249
|
end # module DataMapper
|
@@ -1,8 +1,5 @@
|
|
1
1
|
module DataMapper
|
2
2
|
module Validations
|
3
|
-
|
4
|
-
##
|
5
|
-
#
|
6
3
|
# @author Guy van den Berg
|
7
4
|
# @since 0.9
|
8
5
|
class MethodValidator < GenericValidator
|
@@ -21,22 +18,22 @@ module DataMapper
|
|
21
18
|
def ==(other)
|
22
19
|
@options[:method] == other.instance_variable_get(:@options)[:method] && super
|
23
20
|
end
|
21
|
+
|
24
22
|
end # class MethodValidator
|
25
23
|
|
26
24
|
module ValidatesWithMethod
|
27
|
-
|
28
|
-
|
29
|
-
#
|
30
|
-
# either true, or a pair of [false, error message string], and is specified
|
31
|
-
# as a symbol passed with :method option.
|
25
|
+
# Validate using method called on validated object. The method must
|
26
|
+
# to return either true, or a pair of [false, error message string],
|
27
|
+
# and is specified as a symbol passed with :method option.
|
32
28
|
#
|
33
|
-
# This validator does support multiple fields being specified at a
|
34
|
-
# but we encourage you to use it with one property/method at a
|
29
|
+
# This validator does support multiple fields being specified at a
|
30
|
+
# time, but we encourage you to use it with one property/method at a
|
31
|
+
# time.
|
35
32
|
#
|
36
|
-
# Real world experience shows that method validation is often useful
|
37
|
-
# attribute needs to be virtual and not a property name.
|
33
|
+
# Real world experience shows that method validation is often useful
|
34
|
+
# when attribute needs to be virtual and not a property name.
|
38
35
|
#
|
39
|
-
# @example
|
36
|
+
# @example Usage
|
40
37
|
# require 'dm-validations'
|
41
38
|
#
|
42
39
|
# class Page
|
@@ -44,7 +41,8 @@ module DataMapper
|
|
44
41
|
#
|
45
42
|
# property :zip_code, String
|
46
43
|
#
|
47
|
-
# validates_with_method :zip_code,
|
44
|
+
# validates_with_method :zip_code,
|
45
|
+
# :method => :in_the_right_location?
|
48
46
|
#
|
49
47
|
# def in_the_right_location?
|
50
48
|
# if @zip_code == "94301"
|
@@ -59,10 +57,8 @@ module DataMapper
|
|
59
57
|
# # wrong zip code" unless zip_code == "94301"
|
60
58
|
# end
|
61
59
|
def validates_with_method(*fields)
|
62
|
-
|
63
|
-
add_validator_to_context(opts, fields, DataMapper::Validations::MethodValidator)
|
60
|
+
validators.add(MethodValidator, *fields)
|
64
61
|
end
|
65
|
-
|
66
62
|
end # module ValidatesWithMethod
|
67
63
|
end # module Validations
|
68
64
|
end # module DataMapper
|
@@ -1,8 +1,5 @@
|
|
1
1
|
module DataMapper
|
2
2
|
module Validations
|
3
|
-
|
4
|
-
##
|
5
|
-
#
|
6
3
|
# @author Guy van den Berg
|
7
4
|
# @since 0.9
|
8
5
|
class NumericalityValidator < GenericValidator
|
@@ -37,7 +34,8 @@ module DataMapper
|
|
37
34
|
|
38
35
|
def value_as_string(value)
|
39
36
|
case value
|
40
|
-
|
37
|
+
# Avoid Scientific Notation in Float to_s
|
38
|
+
when Float then value.to_d.to_s('F')
|
41
39
|
when BigDecimal then value.to_s('F')
|
42
40
|
else value.to_s
|
43
41
|
end
|
@@ -72,7 +70,11 @@ module DataMapper
|
|
72
70
|
comparison = value.send(cmp, expected)
|
73
71
|
return if negated ? !comparison : comparison
|
74
72
|
|
75
|
-
errors << ValidationErrors.default_error_message(
|
73
|
+
errors << ValidationErrors.default_error_message(
|
74
|
+
error_message_name,
|
75
|
+
field_name,
|
76
|
+
expected
|
77
|
+
)
|
76
78
|
end
|
77
79
|
|
78
80
|
def validate_integer(value, errors)
|
@@ -124,59 +126,57 @@ module DataMapper
|
|
124
126
|
def validate_ne(value, errors)
|
125
127
|
validate_with_comparison(value, :==, options[:ne] || options[:not_equal_to], :not_equal_to, errors, true)
|
126
128
|
end
|
129
|
+
|
127
130
|
end # class NumericalityValidator
|
128
131
|
|
129
132
|
module ValidatesNumericality
|
130
133
|
extend Deprecate
|
131
134
|
|
132
|
-
# Validate whether a field is numeric
|
135
|
+
# Validate whether a field is numeric.
|
133
136
|
#
|
134
|
-
#
|
137
|
+
# @option [Boolean] :allow_nil
|
138
|
+
# true if number can be nil, false if not.
|
135
139
|
#
|
136
|
-
#
|
137
|
-
# true if number can be
|
140
|
+
# @option [Boolean] :allow_blank
|
141
|
+
# true if number can be blank, false if not.
|
138
142
|
#
|
139
|
-
#
|
140
|
-
# true if number can be blank, false if not
|
141
|
-
#
|
142
|
-
# :message => "Error message for %s"
|
143
|
+
# @option [String] :message
|
143
144
|
# Custom error message, also can be a callable object that takes
|
144
|
-
# an object (for pure Ruby objects) or object and property
|
145
|
+
# an object (for pure Ruby objects) or object and property
|
146
|
+
# (for DM resources).
|
145
147
|
#
|
146
|
-
# :precision
|
147
|
-
# Required precision of a value
|
148
|
+
# @option [Numeric] :precision
|
149
|
+
# Required precision of a value.
|
148
150
|
#
|
149
|
-
# :scale
|
150
|
-
# Required scale of a value
|
151
|
+
# @option [Numeric] :scale
|
152
|
+
# Required scale of a value.
|
151
153
|
#
|
152
|
-
# :gte
|
153
|
-
# 'Greater than or
|
154
|
+
# @option [Numeric] :gte
|
155
|
+
# 'Greater than or equal to' requirement.
|
154
156
|
#
|
155
|
-
# :lte
|
156
|
-
# 'Less than or
|
157
|
+
# @option [Numeric] :lte
|
158
|
+
# 'Less than or equal to' requirement.
|
157
159
|
#
|
158
|
-
# :lt
|
159
|
-
# 'Less than' requirement
|
160
|
+
# @option [Numeric] :lt
|
161
|
+
# 'Less than' requirement.
|
160
162
|
#
|
161
|
-
# :gt
|
162
|
-
# 'Greater than' requirement
|
163
|
+
# @option [Numeric] :gt
|
164
|
+
# 'Greater than' requirement.
|
163
165
|
#
|
164
|
-
# :eq
|
165
|
-
# 'Equal' requirement
|
166
|
+
# @option [Numeric] :eq
|
167
|
+
# 'Equal' requirement.
|
166
168
|
#
|
167
|
-
# :ne
|
168
|
-
# 'Not equal' requirement
|
169
|
+
# @option [Numeric] :ne
|
170
|
+
# 'Not equal' requirement.
|
169
171
|
#
|
170
|
-
# :integer_only
|
171
|
-
# Use to restrict allowed values to integers
|
172
|
+
# @option [Boolean] :integer_only
|
173
|
+
# Use to restrict allowed values to integers.
|
172
174
|
#
|
173
175
|
def validates_numericality_of(*fields)
|
174
|
-
|
175
|
-
add_validator_to_context(opts, fields, DataMapper::Validations::NumericalityValidator)
|
176
|
+
validators.add(NumericalityValidator, *fields)
|
176
177
|
end
|
177
178
|
|
178
179
|
deprecate :validates_is_number, :validates_numericality_of
|
179
|
-
|
180
180
|
end # module ValidatesIsNumber
|
181
181
|
end # module Validations
|
182
182
|
end # module DataMapper
|