validatious-on-rails 0.3.1 → 0.3.2
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/validatious-on-rails/helpers.rb +21 -5
- data/lib/validatious-on-rails/model_validations.rb +61 -75
- data/lib/validatious-on-rails/rails/action_view_helpers.rb +17 -58
- data/lib/validatious-on-rails/validatious/validator.rb +15 -3
- data/lib/validatious-on-rails/validatious/validators/acceptance_validator.rb +28 -0
- data/lib/validatious-on-rails/validatious/validators/confirmation_validator.rb +23 -0
- data/lib/validatious-on-rails/validatious/validators/exclusion_validator.rb +0 -1
- data/lib/validatious-on-rails/validatious/validators/format_validator.rb +0 -1
- data/lib/validatious-on-rails/validatious/validators/inclusion_validator.rb +0 -1
- data/lib/validatious-on-rails/validatious/validators/length/is_validator.rb +0 -1
- data/lib/validatious-on-rails/validatious/validators/length/maximum_validator.rb +0 -1
- data/lib/validatious-on-rails/validatious/validators/length/minimum_validator.rb +0 -1
- data/lib/validatious-on-rails/validatious/validators/presence_validator.rb +22 -0
- data/lib/validatious-on-rails.rb +6 -14
- data/test/test_helper.rb +18 -29
- data/test/validatious_on_rails/helpers_test.rb +3 -3
- data/test/validatious_on_rails/model_validations_test.rb +71 -51
- data/test/validatious_on_rails/rails/action_view_helpers_test.rb +20 -20
- data/test/validatious_on_rails/validatious/validator_test.rb +8 -4
- metadata +9 -3
@@ -1,17 +1,33 @@
|
|
1
1
|
module ValidatiousOnRails
|
2
2
|
module Helpers
|
3
|
-
|
4
|
-
|
5
|
-
|
3
|
+
|
4
|
+
def attach_validator_for(object_name, method, options = {})
|
5
|
+
options = ::ValidatiousOnRails::ModelValidations.options_for(object_name, method, options, @content_for_validatious)
|
6
|
+
custom_js = options.delete(:js)
|
7
|
+
content_for :validatious, custom_js if custom_js.present?
|
8
|
+
options
|
9
|
+
end
|
10
|
+
|
6
11
|
# Helper for the layout to host the custom Validatious-validators for forms rendered.
|
7
12
|
# This will only show up if the current view contains one - or more - forms that
|
8
13
|
# are triggered to be validated with Validatous (i.e. ValidatiousOnRails that is).
|
9
14
|
#
|
10
|
-
def
|
15
|
+
def attached_validators
|
11
16
|
if @content_for_validatious.present?
|
12
17
|
content_tag(:script, @content_for_validatious,
|
13
|
-
:type => 'text/javascript', :id => '
|
18
|
+
:type => 'text/javascript', :id => 'custom_validators')
|
19
|
+
end
|
20
|
+
end
|
21
|
+
alias :javascript_for_validatious :attached_validators
|
22
|
+
|
23
|
+
def self.extract_args!(*args)
|
24
|
+
tail = []
|
25
|
+
tail.unshift(args.pop) until args.blank? || args.last.is_a?(::Hash)
|
26
|
+
unless args.last.is_a?(::Hash)
|
27
|
+
args = tail
|
28
|
+
tail = []
|
14
29
|
end
|
30
|
+
return args, tail
|
15
31
|
end
|
16
32
|
|
17
33
|
end
|
@@ -47,12 +47,18 @@ module ValidatiousOnRails
|
|
47
47
|
# Input may be an ActiveRecord class, a class name (string), or an object
|
48
48
|
# name along with a method/field.
|
49
49
|
#
|
50
|
-
def options_for(object_name, attribute_method, options = {})
|
51
|
-
|
52
|
-
options
|
53
|
-
|
54
|
-
|
55
|
-
|
50
|
+
def options_for(object_name, attribute_method, options = {}, existing_validators = nil)
|
51
|
+
validators = self.from_active_record(object_name, attribute_method)
|
52
|
+
validator_classes, validator_js = [options[:class]], []
|
53
|
+
|
54
|
+
# Only attach validators that are not already attached.
|
55
|
+
validators.flatten.compact.uniq.each do |v|
|
56
|
+
validator_js << v.to_js unless existing_validators.present? && /#{v.name}/ =~ existing_validators
|
57
|
+
validator_classes << v.to_class
|
58
|
+
end
|
59
|
+
classes = validator_classes.compact.join(' ').strip
|
60
|
+
js = validator_js.compact.join(' ').strip
|
61
|
+
options.merge!(:class => (classes unless classes.blank?), :js => (js unless js.blank?))
|
56
62
|
end
|
57
63
|
|
58
64
|
# Groks Rails validations, and is able to convert a rails validation to
|
@@ -68,7 +74,7 @@ module ValidatiousOnRails
|
|
68
74
|
#
|
69
75
|
def from_active_record(object_or_class, attribute_method)
|
70
76
|
klass = object_or_class.to_s.classify.constantize
|
71
|
-
|
77
|
+
validators = []
|
72
78
|
|
73
79
|
# Iterate thorugh the validations for the current class,
|
74
80
|
# and collect validation options.
|
@@ -79,10 +85,7 @@ module ValidatiousOnRails
|
|
79
85
|
# needs to be confirmed. Validatious expects this validation rule
|
80
86
|
# on the confirmation field. *
|
81
87
|
unless validates_type =~ /^confirmation_of$/
|
82
|
-
|
83
|
-
attribute_validation[:classes] << validation_options[:class]
|
84
|
-
# One or multiple validators for each validation (possible to combine validators).
|
85
|
-
attribute_validation[:validators] << validation_options[:validator] || validation_options[:validators]
|
88
|
+
validators << self.send(validates_type.to_sym, validation)
|
86
89
|
end
|
87
90
|
end
|
88
91
|
|
@@ -93,31 +96,27 @@ module ValidatiousOnRails
|
|
93
96
|
# if :hello_confirmation field exists - just to be safe.
|
94
97
|
klass.reflect_on_validations_for(confirm_attribute_method.to_sym).each do |validation|
|
95
98
|
if validation.macro.to_s =~ /^validates_confirmation_of$/
|
96
|
-
|
97
|
-
attribute_validation[:classes] << validation_options[:class]
|
99
|
+
validators << self.confirmation_of(validation)
|
98
100
|
break
|
99
101
|
end
|
100
102
|
end
|
101
103
|
end
|
102
|
-
|
104
|
+
validators
|
103
105
|
end
|
104
106
|
|
105
107
|
# Resolve validation from validates_acceptance_of.
|
106
108
|
#
|
107
109
|
# Alias, but might change: acceptance_of <=> presence_of
|
108
110
|
#
|
109
|
-
# TODO: Make this a custom validator - handle :accept.
|
110
|
-
#
|
111
111
|
# NOTE: Not supported:
|
112
|
-
# * :accept - TODO: not taken into consideration
|
113
|
-
# right now (but must have value "true" for db column values)
|
114
|
-
# * :allow_nil - TODO.
|
115
112
|
# * :on - TODO.
|
116
113
|
# * :if/:unless - hard to port all to client-side JavaScript
|
117
114
|
# (impossible: procs, unaccessible valiables, etc.).
|
118
115
|
#
|
119
116
|
def acceptance_of(validation)
|
120
|
-
|
117
|
+
validators = []
|
118
|
+
validation.options[:accept] ||= '1' # Rails default.
|
119
|
+
validators << Validatious::AcceptanceValidator.new(validation, validation.options[:accept])
|
121
120
|
end
|
122
121
|
|
123
122
|
# Resolve validation from validates_associated.
|
@@ -125,7 +124,7 @@ module ValidatiousOnRails
|
|
125
124
|
# NOTE: Not supported - low prio.
|
126
125
|
#
|
127
126
|
def associated(validation)
|
128
|
-
|
127
|
+
nil
|
129
128
|
end
|
130
129
|
|
131
130
|
# Resolve validation from validates_confirmation_of.
|
@@ -135,17 +134,19 @@ module ValidatiousOnRails
|
|
135
134
|
# TODO: Message should be Rails I18n message, not Validatious.
|
136
135
|
#
|
137
136
|
# NOTE: Not supported:
|
137
|
+
# * :message - TODO: Explicit or Rails I18n/default message.
|
138
138
|
# * :on - TODO.
|
139
139
|
# * :if/:unless - hard to port all to client-side JavaScript
|
140
140
|
# (impossible: procs, unaccessible valiables, etc.).
|
141
141
|
#
|
142
142
|
def confirmation_of(validation)
|
143
|
-
|
143
|
+
validators = []
|
144
|
+
arg = unless validation.active_record.present?
|
144
145
|
"#{validation.active_record.name.tableize.singularize.gsub('/', '_')}_#{validation.name}"
|
145
146
|
else
|
146
147
|
"#{validation.name}"
|
147
148
|
end
|
148
|
-
|
149
|
+
validators << Validatious::ConfirmationValidator.new(validation, arg)
|
149
150
|
end
|
150
151
|
|
151
152
|
# Resolve validation from validates_exclusion_of.
|
@@ -158,8 +159,8 @@ module ValidatiousOnRails
|
|
158
159
|
# (impossible: procs, unaccessible valiables, etc.).
|
159
160
|
#
|
160
161
|
def exclusion_of(validation)
|
161
|
-
|
162
|
-
|
162
|
+
validators = []
|
163
|
+
validators << Validatious::ExclusionValidator.new(validation)
|
163
164
|
end
|
164
165
|
|
165
166
|
# Resolve validation from validates_format_of.
|
@@ -173,8 +174,8 @@ module ValidatiousOnRails
|
|
173
174
|
# (impossible: procs, unaccessible valiables, etc.).
|
174
175
|
#
|
175
176
|
def format_of(validation)
|
176
|
-
|
177
|
-
|
177
|
+
validators = []
|
178
|
+
validators << Validatious::FormatValidator.new(validation)
|
178
179
|
end
|
179
180
|
|
180
181
|
# Resolve validation from validates_inclusion_of.
|
@@ -187,8 +188,8 @@ module ValidatiousOnRails
|
|
187
188
|
# (impossible: procs, unaccessible valiables, etc.).
|
188
189
|
#
|
189
190
|
def inclusion_of(validation)
|
190
|
-
|
191
|
-
|
191
|
+
validators = []
|
192
|
+
validators << Validatious::InclusionValidator.new(validation)
|
192
193
|
end
|
193
194
|
|
194
195
|
# Resolve validation from validates_length_of.
|
@@ -203,34 +204,25 @@ module ValidatiousOnRails
|
|
203
204
|
# (impossible: procs, unaccessible valiables, etc.).
|
204
205
|
#
|
205
206
|
def length_of(validation)
|
206
|
-
|
207
|
-
|
208
|
-
|
209
|
-
|
210
|
-
|
211
|
-
|
212
|
-
|
213
|
-
|
214
|
-
|
215
|
-
|
216
|
-
(validation.options[:minimum]
|
217
|
-
|
218
|
-
|
219
|
-
|
220
|
-
|
221
|
-
|
222
|
-
validation.options[:minimum], nil]
|
223
|
-
when validation.options[:maximum].present?
|
224
|
-
[Validatious::Length::MaximumValidator.new(validation),
|
225
|
-
nil, validation.options[:maximum]]
|
207
|
+
validators = []
|
208
|
+
|
209
|
+
if validation.options[:is].present?
|
210
|
+
validators << Validatious::Length::IsValidator.new(validation, validation.options[:is])
|
211
|
+
elsif [:in, :within, :minimum, :maximum].any? { |k| validation.options[k].present? }
|
212
|
+
validation.options[:within] ||= validation.options[:in]
|
213
|
+
validation.options[:minimum] ||= validation.options[:within].min rescue nil
|
214
|
+
validation.options[:maximum] ||= validation.options[:within].max rescue nil
|
215
|
+
|
216
|
+
if validation.options[:minimum].present?
|
217
|
+
validators << Validatious::Length::MinimumValidator.new(validation, validation.options[:minimum])
|
218
|
+
end
|
219
|
+
|
220
|
+
if validation.options[:maximum].present?
|
221
|
+
validators << Validatious::Length::MaximumValidator.new(validation, validation.options[:maximum])
|
222
|
+
end
|
226
223
|
end
|
227
|
-
|
228
|
-
|
229
|
-
classes = [
|
230
|
-
("#{validators.first.name}_#{min}" if min),
|
231
|
-
("#{validators.last.name}_#{max}" if max)
|
232
|
-
].compact.uniq.join(' ')
|
233
|
-
{:class => classes, :validator => validators}
|
224
|
+
|
225
|
+
validators
|
234
226
|
end
|
235
227
|
alias :size_of :length_of
|
236
228
|
|
@@ -240,36 +232,29 @@ module ValidatiousOnRails
|
|
240
232
|
# numericality-odd, numericality-only-integer, numericality-equal-to_5, etc.
|
241
233
|
#
|
242
234
|
# NOTE: Not supported:
|
243
|
-
# * :on - TODO.
|
235
|
+
# * :on - TODO.en
|
244
236
|
# * :if/:unless - hard to port all to client-side JavaScript
|
245
237
|
# (impossible: procs, unaccessible valiables, etc.).
|
246
238
|
#
|
247
239
|
def numericality_of(validation)
|
248
240
|
validators = []
|
249
|
-
|
250
|
-
|
241
|
+
|
251
242
|
if validation.options[:odd] && !validation.options[:even]
|
252
243
|
validators << Validatious::Numericality::OddValidator.new(validation)
|
253
244
|
end
|
245
|
+
|
254
246
|
if validation.options[:even] && !validation.options[:odd]
|
255
247
|
validators << Validatious::Numericality::EvenValidator.new(validation)
|
256
248
|
end
|
257
|
-
|
249
|
+
|
258
250
|
(validation.options.keys & [:only_integer, :equal_to, :less_than, :less_than_or_equal_to,
|
259
251
|
:greater_than, :greater_than_or_equal_to]).each { |v|
|
260
|
-
|
261
|
-
|
262
|
-
|
252
|
+
validator_klass = "::ValidatiousOnRails::Validatious::Numericality::#{v.to_s.classify}Validator".constantize
|
253
|
+
value = validation.options[v] if validation.options[v].is_a?(::Numeric)
|
254
|
+
validators << validator_klass.new(validation, value)
|
263
255
|
}
|
264
|
-
|
265
|
-
|
266
|
-
# Maybe: validator.args = [...] => validator.to_class => "#{validator.name}_params[0]_params[1]_etc..."
|
267
|
-
classes = validators.collect { |validator|
|
268
|
-
[validator.name,
|
269
|
-
(values[validator.name.to_sym] if values[validator.name.to_sym].present?)
|
270
|
-
].compact.join('_')
|
271
|
-
}.join(' ')
|
272
|
-
{:class => classes, :validator => validators}
|
256
|
+
|
257
|
+
validators
|
273
258
|
end
|
274
259
|
|
275
260
|
# Resolve validation from validates_presence_of.
|
@@ -282,7 +267,8 @@ module ValidatiousOnRails
|
|
282
267
|
# (impossible: procs, unaccessible valiables, etc.).
|
283
268
|
#
|
284
269
|
def presence_of(validation)
|
285
|
-
|
270
|
+
validators = []
|
271
|
+
validators << Validatious::PresenceValidator.new(validation)
|
286
272
|
end
|
287
273
|
|
288
274
|
# Resolve validation from validates_uniqueness_of.
|
@@ -290,7 +276,7 @@ module ValidatiousOnRails
|
|
290
276
|
# TODO: Implement using RemoteValidator.
|
291
277
|
#
|
292
278
|
def uniqueness_of(validation)
|
293
|
-
|
279
|
+
nil
|
294
280
|
end
|
295
281
|
|
296
282
|
# Unknown validations - if no matching custom validator is found/registered.
|
@@ -300,7 +286,7 @@ module ValidatiousOnRails
|
|
300
286
|
" No custom Validatious validator found for this validation makro. " <<
|
301
287
|
"Maybe you forgot to register you custom validation using: " <<
|
302
288
|
"ValidatiousOnRails::ModelValidations.add(<CustomValidationClass>)", :warn
|
303
|
-
|
289
|
+
nil
|
304
290
|
end
|
305
291
|
|
306
292
|
# TODO: Include custom validations here...
|
@@ -1,4 +1,5 @@
|
|
1
1
|
# encoding: utf-8
|
2
|
+
require File.join(File.dirname(__FILE__), *%w[.. helpers])
|
2
3
|
#
|
3
4
|
# Tap into the built-in form/input helpers to add validatious class names from
|
4
5
|
# model validations.
|
@@ -7,48 +8,22 @@ module ActionView # :nodoc:
|
|
7
8
|
module Helpers # :nodoc:
|
8
9
|
module FormHelper # :nodoc:
|
9
10
|
|
10
|
-
|
11
|
+
include ::ValidatiousOnRails::Helpers
|
12
|
+
|
13
|
+
FIELD_TYPES = [:text_field, :password_field, :text_area, :file_field, :radio_button, :check_box].freeze
|
11
14
|
|
12
15
|
# Only altering the options hash is interesting - we want to set a validator class for fields,
|
13
16
|
# so the hooking of these helpers don't have to be very explicit.
|
14
17
|
#
|
15
18
|
FIELD_TYPES.each do |field_type|
|
16
19
|
define_method :"#{field_type}_with_validation" do |*args|
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
# Attach custom validator - if any - to the layout (in the <head>-tag - the unobtrusive way).
|
22
|
-
# Don't attach validator(s) if it/they already attached.
|
23
|
-
# TODO: Refactor into helper.
|
24
|
-
validators_js = options.delete(:validators).collect { |v|
|
25
|
-
v.to_s unless /#{v.name}/ =~ @content_for_validatious
|
26
|
-
}.join(' ')
|
27
|
-
content_for :validatious, validators_js if validators_js.present?
|
28
|
-
|
29
|
-
self.send :"#{field_type}_without_validation", *(args << options)
|
20
|
+
args, tail = ::ValidatiousOnRails::Helpers.extract_args!(*args)
|
21
|
+
options = self.attach_validator_for(args.first, args.second, args.extract_options!)
|
22
|
+
self.send :"#{field_type}_without_validation", *((args << options) + tail)
|
30
23
|
end
|
31
24
|
alias_method_chain field_type, :validation
|
32
25
|
end
|
33
26
|
|
34
|
-
# Special case...no hash as last argument.
|
35
|
-
#
|
36
|
-
def check_box_with_validation(object_name, method, options = {}, checked_value = '1', unchecked_value = '0')
|
37
|
-
# Get the validation options.
|
38
|
-
options = ::ValidatiousOnRails::ModelValidations.options_for(object_name, method, options)
|
39
|
-
|
40
|
-
# Attach custom validator - if any - to the layout (in the <head>-tag - the unobtrusive way).
|
41
|
-
# Don't attach validator(s) if it/they already attached.
|
42
|
-
# TODO: Refactor into helper.
|
43
|
-
validators_js = options.delete(:validators).collect { |v|
|
44
|
-
v.to_s unless /#{v.name}/ =~ @content_for_validatious
|
45
|
-
}.join(' ')
|
46
|
-
content_for :validatious, validators_js if validators_js.present?
|
47
|
-
|
48
|
-
self.check_box_without_validation object_name, method, options, checked_value, unchecked_value
|
49
|
-
end
|
50
|
-
alias_method_chain :check_box, :validation
|
51
|
-
|
52
27
|
# Adds the title attribute to label tags when there is no title
|
53
28
|
# set, and the label text is provided. The title is set to object_name.humanize
|
54
29
|
#
|
@@ -62,23 +37,15 @@ module ActionView # :nodoc:
|
|
62
37
|
|
63
38
|
module FormOptionsHelper
|
64
39
|
|
40
|
+
include ::ValidatiousOnRails::Helpers
|
41
|
+
|
65
42
|
FIELD_TYPES = [:time_zone_select, :select, :collection_select, :grouped_options_for_select].freeze
|
66
43
|
|
67
44
|
FIELD_TYPES.each do |field_type|
|
68
45
|
define_method :"#{field_type}_with_validation" do |*args|
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
# Attach custom validator - if any - to the layout (in the <head>-tag - the unobtrusive way).
|
74
|
-
# Don't attach validator(s) if it/they already attached.
|
75
|
-
# TODO: Refactor into helper.
|
76
|
-
validators_js = options.delete(:validators).collect { |v|
|
77
|
-
v.to_s unless /#{v.name}/ =~ @content_for_validatious
|
78
|
-
}.join(' ')
|
79
|
-
content_for :validatious, validators_js if validators_js.present?
|
80
|
-
|
81
|
-
self.send :"#{field_type}_without_validation", *(args << options)
|
46
|
+
args, tail = ::ValidatiousOnRails::Helpers.extract_args!(*args)
|
47
|
+
options = self.attach_validator_for(args.first, args.second, args.extract_options!)
|
48
|
+
self.send :"#{field_type}_without_validation", *((args << options) + tail)
|
82
49
|
end
|
83
50
|
alias_method_chain field_type, :validation
|
84
51
|
end
|
@@ -87,23 +54,15 @@ module ActionView # :nodoc:
|
|
87
54
|
|
88
55
|
module DateHelper
|
89
56
|
|
57
|
+
include ::ValidatiousOnRails::Helpers
|
58
|
+
|
90
59
|
FIELD_TYPES = [:date_select, :datetime_select, :time_select].freeze
|
91
60
|
|
92
61
|
FIELD_TYPES.each do |field_type|
|
93
62
|
define_method :"#{field_type}_with_validation" do |*args|
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
# Attach custom validator - if any - to the layout (in the <head>-tag - the unobtrusive way).
|
99
|
-
# Don't attach validator(s) if it/they already attached.
|
100
|
-
# TODO: Refactor into helper.
|
101
|
-
validators_js = options.delete(:validators).collect { |v|
|
102
|
-
v.to_s unless /#{v.name}/ =~ @content_for_validatious
|
103
|
-
}.join(' ')
|
104
|
-
content_for :validatious, validators_js if validators_js.present?
|
105
|
-
|
106
|
-
self.send :"#{field_type}_without_validation", *(args << options)
|
63
|
+
args, tail = ::ValidatiousOnRails::Helpers.extract_args!(*args)
|
64
|
+
options = self.attach_validator_for(args.first, args.second, args.extract_options!)
|
65
|
+
self.send :"#{field_type}_without_validation", *((args << options) + tail)
|
107
66
|
end
|
108
67
|
alias_method_chain field_type, :validation
|
109
68
|
end
|
@@ -28,14 +28,17 @@ module ValidatiousOnRails
|
|
28
28
|
:params,
|
29
29
|
:aliases,
|
30
30
|
:accept_empty,
|
31
|
-
:fn
|
31
|
+
:fn,
|
32
|
+
:args
|
32
33
|
|
33
|
-
def initialize(name,
|
34
|
+
def initialize(name, *args)
|
34
35
|
raise ValidatorError, "Parameter :name is required for an Validatious validator" unless name.present?
|
35
36
|
self.name = name
|
37
|
+
options = args.extract_options!
|
36
38
|
options.each do |attr, value|
|
37
39
|
self.send(:"#{attr}=", value) if value.present?
|
38
40
|
end
|
41
|
+
self.args = args
|
39
42
|
end
|
40
43
|
|
41
44
|
# The primary name of the validator. This is the name you use with v2.$v('name');
|
@@ -125,7 +128,7 @@ module ValidatiousOnRails
|
|
125
128
|
(@fn ||= "function(field, value, params) {return true;}").gsub(/[\n\t]/, '')
|
126
129
|
end
|
127
130
|
|
128
|
-
def
|
131
|
+
def to_js
|
129
132
|
options = {
|
130
133
|
:name => self.name,
|
131
134
|
:message => self.message,
|
@@ -142,6 +145,15 @@ module ValidatiousOnRails
|
|
142
145
|
}.compact.join(', ')
|
143
146
|
"v2.Validator.add({#{js_options}});"
|
144
147
|
end
|
148
|
+
alias :to_s :to_js
|
149
|
+
|
150
|
+
# Generate a full Validatious-style "class function call" to generic validators, e.g.
|
151
|
+
# Length::MinimumValidator#to_class(5) => "length-minimum_5", etc.
|
152
|
+
#
|
153
|
+
def to_class(*args)
|
154
|
+
args = @args if args.blank?
|
155
|
+
[self.name, (args if args.present?)].flatten.compact.join('_')
|
156
|
+
end
|
145
157
|
|
146
158
|
class << self
|
147
159
|
|
@@ -0,0 +1,28 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
require File.expand_path(File.join(File.dirname(__FILE__), *%w[.. validator]))
|
3
|
+
|
4
|
+
module ValidatiousOnRails
|
5
|
+
module Validatious
|
6
|
+
class AcceptanceValidator < ClientSideValidator
|
7
|
+
|
8
|
+
def initialize(validation, options = {})
|
9
|
+
name = 'acceptance-accept'
|
10
|
+
super name, options
|
11
|
+
self.message = self.class.generate_message(validation)
|
12
|
+
self.accept_empty = validation.options[:allow_nil]
|
13
|
+
self.fn = %{
|
14
|
+
var accept_value = params[0] + '';
|
15
|
+
if (accept_value == 'true') {
|
16
|
+
accept_value = true
|
17
|
+
};
|
18
|
+
if (accept_value == 'false') {
|
19
|
+
accept_value = false
|
20
|
+
};
|
21
|
+
return value == accept_value;
|
22
|
+
}
|
23
|
+
self.fn.freeze
|
24
|
+
end
|
25
|
+
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
require File.expand_path(File.join(File.dirname(__FILE__), *%w[.. validator]))
|
3
|
+
|
4
|
+
module ValidatiousOnRails
|
5
|
+
module Validatious
|
6
|
+
class ConfirmationValidator < ClientSideValidator
|
7
|
+
|
8
|
+
def initialize(validation, options = {})
|
9
|
+
name = 'confirmation-of'
|
10
|
+
super name, options
|
11
|
+
self.params = ['field-id']
|
12
|
+
self.message = self.class.generate_message(validation)
|
13
|
+
self.accept_empty = true
|
14
|
+
# Identical to Validatious "confirmation-of" validator, but we want Rails I18n message support, so...
|
15
|
+
self.fn = %{
|
16
|
+
return value === v2.$f(params[0]).getValue();
|
17
|
+
}
|
18
|
+
self.fn.freeze
|
19
|
+
end
|
20
|
+
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -10,7 +10,6 @@ module ValidatiousOnRails
|
|
10
10
|
def initialize(validation, options = {})
|
11
11
|
name, alias_name = self.class.generate_name(validation, :in, self.class.generate_id(validation.options[:in].inspect))
|
12
12
|
super name, options
|
13
|
-
self.aliases = [alias_name] - [name]
|
14
13
|
self.message = self.class.generate_message(validation)
|
15
14
|
self.accept_empty = validation.options[:allow_blank] || validation.options[:allow_nil]
|
16
15
|
self.fn = %{
|
@@ -19,7 +19,6 @@ module ValidatiousOnRails
|
|
19
19
|
def initialize(validation, options = {})
|
20
20
|
name, alias_name = self.class.generate_name(validation, :with, self.class.generate_id(validation.options[:with].inspect))
|
21
21
|
super name, options
|
22
|
-
self.aliases = [alias_name] - [name]
|
23
22
|
self.message = self.class.generate_message(validation)
|
24
23
|
self.accept_empty = validation.options[:allow_blank] || validation.options[:allow_nil]
|
25
24
|
self.fn = %{
|
@@ -10,7 +10,6 @@ module ValidatiousOnRails
|
|
10
10
|
def initialize(validation, options = {})
|
11
11
|
name, alias_name = self.class.generate_name(validation, :in, self.class.generate_id(validation.options[:in].inspect))
|
12
12
|
super name, options
|
13
|
-
self.aliases = [alias_name] - [name]
|
14
13
|
self.message = self.class.generate_message(validation)
|
15
14
|
self.accept_empty = validation.options[:allow_blank] || validation.options[:allow_nil]
|
16
15
|
self.fn = %{
|
@@ -10,7 +10,6 @@ module ValidatiousOnRails
|
|
10
10
|
name, alias_name = self.class.generate_name(validation, :is, validation.options[:is])
|
11
11
|
name = 'length-is'
|
12
12
|
super name, options
|
13
|
-
self.aliases = [alias_name] - [name]
|
14
13
|
self.params = ['count']
|
15
14
|
self.message = self.class.generate_message(validation, :key => :wrong_length)
|
16
15
|
self.accept_empty = validation.options[:allow_blank] || validation.options[:allow_nil]
|
@@ -10,7 +10,6 @@ module ValidatiousOnRails
|
|
10
10
|
name, alias_name = self.class.generate_name(validation, :maximum, validation.options[:maximum])
|
11
11
|
name = 'length-maximum'
|
12
12
|
super name, options
|
13
|
-
self.aliases = [alias_name] - [name]
|
14
13
|
self.params = ['count']
|
15
14
|
self.message = self.class.generate_message(validation, :key => :too_long)
|
16
15
|
self.accept_empty = validation.options[:allow_blank] || validation.options[:allow_nil]
|
@@ -10,7 +10,6 @@ module ValidatiousOnRails
|
|
10
10
|
name, alias_name = self.class.generate_name(validation, :minimum, validation.options[:minimum])
|
11
11
|
name = 'length-minimum'
|
12
12
|
super name, options
|
13
|
-
self.aliases = [alias_name] - [name]
|
14
13
|
self.params = ['count']
|
15
14
|
self.message = self.class.generate_message(validation, :key => :too_short)
|
16
15
|
self.accept_empty = validation.options[:allow_blank] || validation.options[:allow_nil]
|
@@ -0,0 +1,22 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
require File.expand_path(File.join(File.dirname(__FILE__), *%w[.. validator]))
|
3
|
+
|
4
|
+
module ValidatiousOnRails
|
5
|
+
module Validatious
|
6
|
+
class PresenceValidator < ClientSideValidator
|
7
|
+
|
8
|
+
def initialize(validation, options = {})
|
9
|
+
name = 'presence'
|
10
|
+
super name, options
|
11
|
+
self.message = self.class.generate_message(validation)
|
12
|
+
self.accept_empty = false
|
13
|
+
# Identical to Validatious "required" validator, but we want Rails I18n message support, so...
|
14
|
+
self.fn = %{
|
15
|
+
return !v2.empty(value) && !(typeof value.length !== 'undefined' && value.length === 0);
|
16
|
+
}
|
17
|
+
self.fn.freeze
|
18
|
+
end
|
19
|
+
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
data/lib/validatious-on-rails.rb
CHANGED
@@ -5,9 +5,9 @@ require File.join(File.dirname(__FILE__), *%w[validatious-on-rails rails])
|
|
5
5
|
require File.join(File.dirname(__FILE__), *%w[validatious-on-rails helpers])
|
6
6
|
|
7
7
|
module ValidatiousOnRails # :nodoc:
|
8
|
-
|
8
|
+
|
9
9
|
extend self
|
10
|
-
|
10
|
+
|
11
11
|
# Standard error: Acts as base error class for the plugin.
|
12
12
|
#
|
13
13
|
class ValidatiousOnRailsError < ::StandardError
|
@@ -16,11 +16,11 @@ module ValidatiousOnRails # :nodoc:
|
|
16
16
|
super message
|
17
17
|
end
|
18
18
|
end
|
19
|
-
|
19
|
+
|
20
20
|
mattr_accessor :verbose
|
21
|
-
|
21
|
+
|
22
22
|
@@verbose = ::Object.const_defined?(:RAILS_ENV) ? (::RAILS_ENV.to_sym == :development) : true
|
23
|
-
|
23
|
+
|
24
24
|
# Logging helper: Internal debug-logging for the plugin.
|
25
25
|
#
|
26
26
|
def log(message, level = :info)
|
@@ -29,13 +29,5 @@ module ValidatiousOnRails # :nodoc:
|
|
29
29
|
@@logger ||= ::Logger.new(::STDOUT)
|
30
30
|
@@logger.send(level.to_sym, message)
|
31
31
|
end
|
32
|
-
|
33
|
-
# Alias method for: ValidatiousOnRails::Helpers#custom_validatious_validators
|
34
|
-
#
|
35
|
-
def custom_validators
|
36
|
-
Helpers.custom_validatious_validators
|
37
|
-
end
|
38
|
-
alias :include_custom_validators :custom_validators
|
39
|
-
::ActionController::Base.helper_method :custom_validators, :include_custom_validators
|
40
|
-
|
32
|
+
|
41
33
|
end
|
data/test/test_helper.rb
CHANGED
@@ -4,44 +4,33 @@
|
|
4
4
|
# convenience methods.
|
5
5
|
#
|
6
6
|
|
7
|
+
def smart_require(lib_name, gem_name, gem_version = '>= 0.0.0')
|
8
|
+
begin
|
9
|
+
require lib_name
|
10
|
+
rescue LoadError
|
11
|
+
gem gem_name, gem_version
|
12
|
+
require lib_name
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
7
16
|
begin
|
8
17
|
require File.expand_path(File.join(File.dirname(__FILE__), *%w(.. .. .. .. config environment)))
|
9
18
|
rescue LoadError
|
10
19
|
require 'rubygems'
|
11
20
|
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
require 'test/unit'
|
18
|
-
require 'active_record'
|
19
|
-
require 'action_controller'
|
20
|
-
require 'sqlite3'
|
21
|
+
smart_require 'test/unit', 'test-unit', '= 1.2.3'
|
22
|
+
smart_require 'active_record', 'activerecord', '>= 1.2.3'
|
23
|
+
smart_require 'action_controller', 'actionpack', '>= 1.2.3'
|
24
|
+
smart_require 'sqlite3', 'sqlite3-ruby', '>= 1.2.0'
|
21
25
|
end
|
22
26
|
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
require 'context'
|
28
|
-
end
|
27
|
+
smart_require 'redgreen', 'redgreen', '>= 0.10.4'
|
28
|
+
smart_require 'context', 'jeremymcanally-context', '>= 0.5.5'
|
29
|
+
smart_require 'rr', 'rr', '>= 0.10.0'
|
30
|
+
smart_require 'acts_as_fu', 'nakajima-acts_as_fu', '>= 0.0.5'
|
29
31
|
|
30
|
-
begin
|
31
|
-
require 'rr'
|
32
|
-
rescue LoadError
|
33
|
-
gem 'rr', '>= 0.0.0'
|
34
|
-
require 'rr'
|
35
|
-
end
|
36
32
|
extend RR::Adapters::RRMethods
|
37
33
|
|
38
|
-
begin
|
39
|
-
require 'acts_as_fu'
|
40
|
-
rescue LoadError
|
41
|
-
gem 'nakajima-acts_as_fu', '>= 0.0.5'
|
42
|
-
require 'acts_as_fu'
|
43
|
-
end
|
44
|
-
|
45
34
|
require 'validatious-on-rails'
|
46
35
|
|
47
36
|
# TODO: Should extend Rails validators with this - to test respond_to.
|
@@ -70,7 +59,7 @@ build_model :bogus_items do
|
|
70
59
|
|
71
60
|
validates_presence_of :name, :body, :variant
|
72
61
|
validates_confirmation_of :name
|
73
|
-
validates_acceptance_of :signed
|
62
|
+
validates_acceptance_of :signed, :accept => true
|
74
63
|
validates_format_of :url,
|
75
64
|
:with => /^(http|https|ftp):\/\/(([A-Z0-9][A-Z0-9_-]*)(\.[A-Z0-9][A-Z0-9_-]*)+)(:(\d+))?\/?/i,
|
76
65
|
:name => 'url', :message => 'Invalid URL.'
|
@@ -8,7 +8,7 @@ class HelpersTest < ::ActionView::TestCase
|
|
8
8
|
include ActionView::Helpers::FormHelper
|
9
9
|
|
10
10
|
attr_accessor :output_buffer
|
11
|
-
|
11
|
+
|
12
12
|
before do
|
13
13
|
@output_buffer ||= ''
|
14
14
|
end
|
@@ -17,7 +17,7 @@ class HelpersTest < ::ActionView::TestCase
|
|
17
17
|
context "custom_validatious_validators" do
|
18
18
|
|
19
19
|
test "should not output custom validators if there are none" do
|
20
|
-
helper_output = ::ValidatiousOnRails::Helpers.
|
20
|
+
helper_output = ::ValidatiousOnRails::Helpers.attached_validators
|
21
21
|
assert_equal '', helper_output.to_s
|
22
22
|
end
|
23
23
|
|
@@ -27,7 +27,7 @@ class HelpersTest < ::ActionView::TestCase
|
|
27
27
|
end
|
28
28
|
|
29
29
|
# FIXME: Not sure how to test content_for-helpers...returns nil.
|
30
|
-
concat ::ValidatiousOnRails::Helpers.
|
30
|
+
concat ::ValidatiousOnRails::Helpers.attached_validators
|
31
31
|
|
32
32
|
# In parts...
|
33
33
|
# assert_match /<script.+>.*v2.Validator.*<\/script>/, output_buffer
|
@@ -7,9 +7,20 @@ class ModelValidationsTest < ::ActiveSupport::TestCase
|
|
7
7
|
|
8
8
|
include ActionView::Helpers::FormHelper
|
9
9
|
|
10
|
-
|
11
|
-
|
12
|
-
|
10
|
+
context "acceptance_of" do
|
11
|
+
test "with defaults" do
|
12
|
+
validators = ::ValidatiousOnRails::ModelValidations.acceptance_of(
|
13
|
+
validation(:validates_acceptance_of)
|
14
|
+
)
|
15
|
+
assert_validator_class 'acceptance-accept_1', validators
|
16
|
+
end
|
17
|
+
|
18
|
+
test "with :accept" do
|
19
|
+
validators = ::ValidatiousOnRails::ModelValidations.acceptance_of(
|
20
|
+
validation(:validates_acceptance_of, :accept => true)
|
21
|
+
)
|
22
|
+
assert_validator_class 'acceptance-accept_true', validators
|
23
|
+
end
|
13
24
|
end
|
14
25
|
|
15
26
|
test "associated" do
|
@@ -17,162 +28,163 @@ class ModelValidationsTest < ::ActiveSupport::TestCase
|
|
17
28
|
end
|
18
29
|
|
19
30
|
test "confirmation_of" do
|
20
|
-
|
21
|
-
|
31
|
+
validators = ::ValidatiousOnRails::ModelValidations.confirmation_of(
|
32
|
+
validation(:validates_confirmation_of)
|
33
|
+
)
|
34
|
+
assert_validator_class 'confirmation-of_name', validators
|
22
35
|
end
|
23
36
|
|
24
37
|
test "exclusion_of" do
|
25
38
|
values = (6..10).to_a
|
26
|
-
|
39
|
+
validators = ::ValidatiousOnRails::ModelValidations.exclusion_of(
|
27
40
|
validation(:validates_exclusion_of, :in => values)
|
28
41
|
)
|
29
|
-
|
30
|
-
assert_match /#{values.to_json}/,
|
42
|
+
assert_validator_class /^exclusion-in-(\d+)/, validators
|
43
|
+
assert_match /#{values.to_json}/, validators.first.fn
|
31
44
|
end
|
32
45
|
|
33
46
|
test "format_of" do
|
34
47
|
pattern = /^(http|https|ftp):\/\/(([A-Z0-9][A-Z0-9_-]*)(\.[A-Z0-9][A-Z0-9_-]*)+)(:(\d+))?\/?/i
|
35
|
-
|
48
|
+
validators = ::ValidatiousOnRails::ModelValidations.format_of(
|
36
49
|
validation(:validates_format_of, :with => pattern)
|
37
50
|
)
|
38
|
-
|
39
|
-
assert_match /#{pattern.inspect[1,-1]}/,
|
51
|
+
assert_validator_class /^format-with-(\d+)/, validators
|
52
|
+
assert_match /#{pattern.inspect[1,-1]}/, validators.first.fn
|
40
53
|
end
|
41
54
|
|
42
55
|
test "inclusion_of" do
|
43
56
|
values = (1..5).to_a
|
44
|
-
|
57
|
+
validators = ::ValidatiousOnRails::ModelValidations.inclusion_of(
|
45
58
|
validation(:validates_inclusion_of, :in => values)
|
46
59
|
)
|
47
|
-
|
48
|
-
assert_match /#{values.to_json}/,
|
60
|
+
assert_validator_class /^inclusion-in-(\d+)/, validators
|
61
|
+
assert_match /#{values.to_json}/, validators.first.fn
|
49
62
|
end
|
50
63
|
|
51
64
|
context "length_of" do
|
52
65
|
|
53
66
|
test "with :is" do
|
54
|
-
|
67
|
+
validators = ::ValidatiousOnRails::ModelValidations.length_of(
|
55
68
|
validation(:validates_length_of, :is => 2)
|
56
69
|
)
|
57
|
-
|
70
|
+
assert_validator_class 'length-is_2', validators
|
58
71
|
end
|
59
72
|
|
60
73
|
test "with :in" do
|
61
|
-
|
74
|
+
validators = ::ValidatiousOnRails::ModelValidations.length_of(
|
62
75
|
validation(:validates_length_of, :in => 2..10)
|
63
76
|
)
|
64
|
-
|
77
|
+
assert_validator_class 'length-minimum_2 length-maximum_10', validators
|
65
78
|
end
|
66
79
|
|
67
80
|
test "with :within" do
|
68
|
-
|
81
|
+
validators = ::ValidatiousOnRails::ModelValidations.length_of(
|
69
82
|
validation(:validates_length_of, :within => 2..10)
|
70
83
|
)
|
71
|
-
|
84
|
+
assert_validator_class 'length-minimum_2 length-maximum_10', validators
|
72
85
|
end
|
73
86
|
|
74
87
|
test "with :minimum" do
|
75
|
-
|
88
|
+
validators = ::ValidatiousOnRails::ModelValidations.length_of(
|
76
89
|
validation(:validates_length_of, :minimum => 2)
|
77
90
|
)
|
78
|
-
|
91
|
+
assert_validator_class 'length-minimum_2', validators
|
79
92
|
end
|
80
93
|
|
81
94
|
test "with :maximum" do
|
82
|
-
|
95
|
+
validators = ::ValidatiousOnRails::ModelValidations.length_of(
|
83
96
|
validation(:validates_length_of, :maximum => 10)
|
84
97
|
)
|
85
|
-
|
98
|
+
assert_validator_class 'length-maximum_10', validators
|
86
99
|
end
|
87
100
|
|
88
101
|
test "with :minimum + :maximum" do
|
89
|
-
|
102
|
+
validators = ::ValidatiousOnRails::ModelValidations.length_of(
|
90
103
|
validation(:validates_length_of, :minimum => 2, :maximum => 10)
|
91
104
|
)
|
92
|
-
|
105
|
+
assert_validator_class 'length-minimum_2 length-maximum_10', validators
|
93
106
|
end
|
94
107
|
end
|
95
108
|
|
96
109
|
context "numericality_of" do
|
97
|
-
|
110
|
+
|
98
111
|
context ":odd/:even" do
|
99
112
|
test "with :odd only" do
|
100
|
-
|
113
|
+
validators = ::ValidatiousOnRails::ModelValidations.numericality_of(
|
101
114
|
validation(:validates_numericality_of, :even => false, :odd => true)
|
102
115
|
)
|
103
|
-
|
116
|
+
assert_validator_class 'numericality-odd', validators
|
104
117
|
end
|
105
118
|
|
106
119
|
test "with :even only" do
|
107
|
-
|
120
|
+
validators = ::ValidatiousOnRails::ModelValidations.numericality_of(
|
108
121
|
validation(:validates_numericality_of, :even => true, :odd => false)
|
109
122
|
)
|
110
|
-
|
123
|
+
assert_validator_class 'numericality-even', validators
|
111
124
|
end
|
112
125
|
|
113
126
|
test "with :odd and :even" do
|
114
|
-
|
127
|
+
validators = ::ValidatiousOnRails::ModelValidations.numericality_of(
|
115
128
|
validation(:validates_numericality_of, :even => true, :odd => true)
|
116
129
|
)
|
117
|
-
|
130
|
+
assert_validator_class '', validators
|
118
131
|
end
|
119
132
|
|
120
133
|
test "with neither :odd or :even" do
|
121
|
-
|
134
|
+
validators = ::ValidatiousOnRails::ModelValidations.numericality_of(
|
122
135
|
validation(:validates_numericality_of)
|
123
136
|
)
|
124
|
-
|
137
|
+
assert_validator_class '', validators
|
125
138
|
end
|
126
139
|
end
|
127
|
-
|
128
140
|
|
129
141
|
test "with :only_integer" do
|
130
|
-
|
142
|
+
validators = ::ValidatiousOnRails::ModelValidations.numericality_of(
|
131
143
|
validation(:validates_numericality_of, :only_integer => true)
|
132
144
|
)
|
133
|
-
# Alt. more generic idea: assert_equal 'numericality-precision_0',
|
134
|
-
|
145
|
+
# Alt. more generic idea: assert_equal 'numericality-precision_0', validator.to_class
|
146
|
+
assert_validator_class 'numericality-only_integer', validators
|
135
147
|
end
|
136
148
|
|
137
149
|
test "with :greater_than" do
|
138
|
-
|
150
|
+
validators = ::ValidatiousOnRails::ModelValidations.numericality_of(
|
139
151
|
validation(:validates_numericality_of, :greater_than => 2)
|
140
152
|
)
|
141
|
-
|
153
|
+
assert_validator_class 'numericality-greater-than_2', validators
|
142
154
|
end
|
143
155
|
|
144
156
|
test "with :greater_than_or_equal_to" do
|
145
|
-
|
157
|
+
validators = ::ValidatiousOnRails::ModelValidations.numericality_of(
|
146
158
|
validation(:validates_numericality_of, :greater_than_or_equal_to => 2)
|
147
159
|
)
|
148
|
-
|
160
|
+
assert_validator_class 'numericality-greater-than-or-equal-to_2', validators
|
149
161
|
end
|
150
162
|
|
151
163
|
test "with :equal_to" do
|
152
|
-
|
164
|
+
validators = ::ValidatiousOnRails::ModelValidations.numericality_of(
|
153
165
|
validation(:validates_numericality_of, :equal_to => 2)
|
154
166
|
)
|
155
|
-
|
167
|
+
assert_validator_class 'numericality-equal-to_2', validators
|
156
168
|
end
|
157
169
|
|
158
170
|
test "with :less_than" do
|
159
|
-
|
171
|
+
validators = ::ValidatiousOnRails::ModelValidations.numericality_of(
|
160
172
|
validation(:validates_numericality_of, :less_than => 10)
|
161
173
|
)
|
162
|
-
|
174
|
+
assert_validator_class 'numericality-less-than_10', validators
|
163
175
|
end
|
164
176
|
|
165
177
|
test "with :less_than_or_equal_to" do
|
166
|
-
|
178
|
+
validators = ::ValidatiousOnRails::ModelValidations.numericality_of(
|
167
179
|
validation(:validates_numericality_of, :less_than_or_equal_to => 10)
|
168
180
|
)
|
169
|
-
|
181
|
+
assert_validator_class 'numericality-less-than-or-equal-to_10', validators
|
170
182
|
end
|
171
183
|
end
|
172
184
|
|
173
185
|
test "presence_of" do
|
174
|
-
|
175
|
-
|
186
|
+
validators = ::ValidatiousOnRails::ModelValidations.presence_of(validation(:validates_presence_of))
|
187
|
+
assert_validator_class 'presence', validators
|
176
188
|
end
|
177
189
|
|
178
190
|
test "uniqueness_of" do
|
@@ -187,4 +199,12 @@ class ModelValidationsTest < ::ActiveSupport::TestCase
|
|
187
199
|
::ActiveRecord::Reflection::MacroReflection.new(macro, :name, options, BogusItem.new)
|
188
200
|
end
|
189
201
|
|
202
|
+
def assert_validator_class(expected, actual)
|
203
|
+
if expected.is_a?(::Regexp)
|
204
|
+
assert_match expected, [*actual].collect { |v| v.to_class }.join(' ')
|
205
|
+
else
|
206
|
+
assert_equal expected, [*actual].collect { |v| v.to_class }.join(' ')
|
207
|
+
end
|
208
|
+
end
|
209
|
+
|
190
210
|
end
|
@@ -38,69 +38,69 @@ class FormHelperTest < ::ActionView::TestCase
|
|
38
38
|
|
39
39
|
test "required :text_field" do
|
40
40
|
# Using helper
|
41
|
-
assert_has_class '
|
42
|
-
assert_has_class '
|
41
|
+
assert_has_class 'presence', text_field(:bogus_item, :name)
|
42
|
+
assert_has_class 'presence some_other_class', text_field(:bogus_item, :name, :class => 'some_other_class')
|
43
43
|
|
44
44
|
# Using builder
|
45
|
-
assert_has_class '
|
45
|
+
assert_has_class 'presence', form_for(@bogus_item, :url => '/bogus_items') { |f|
|
46
46
|
concat f.text_field(:name)
|
47
47
|
}
|
48
|
-
assert_has_class '
|
48
|
+
assert_has_class 'presence text', form_for(@bogus_item, :url => '/bogus_items') { |f|
|
49
49
|
concat f.text_field(:name, :class => 'text')
|
50
50
|
}
|
51
51
|
end
|
52
52
|
|
53
53
|
test "required :password_field" do
|
54
54
|
# Using helper
|
55
|
-
assert_has_class '
|
56
|
-
assert_has_class '
|
55
|
+
assert_has_class 'presence', password_field(:bogus_item, :name)
|
56
|
+
assert_has_class 'presence some_other_class', password_field(:bogus_item, :name, :class => 'some_other_class')
|
57
57
|
|
58
58
|
# Using builder
|
59
|
-
assert_has_class '
|
59
|
+
assert_has_class 'presence', form_for(@bogus_item, :url => '/bogus_items') { |f|
|
60
60
|
concat f.password_field(:name)
|
61
61
|
}
|
62
|
-
assert_has_class '
|
62
|
+
assert_has_class 'presence some_other_class', form_for(@bogus_item, :url => '/bogus_items') { |f|
|
63
63
|
concat f.password_field(:name, :class => 'some_other_class')
|
64
64
|
}
|
65
65
|
end
|
66
66
|
|
67
67
|
test "required :text_area" do
|
68
68
|
# Using helper
|
69
|
-
assert_has_class '
|
70
|
-
assert_has_class '
|
69
|
+
assert_has_class 'presence', text_area(:bogus_item, :body)
|
70
|
+
assert_has_class 'presence some_other_class', text_area(:bogus_item, :body, :class => 'some_other_class')
|
71
71
|
|
72
72
|
# Using builder
|
73
|
-
assert_has_class '
|
73
|
+
assert_has_class 'presence', form_for(@bogus_item, :url => '/bogus_items') { |f|
|
74
74
|
concat f.text_area(:body)
|
75
75
|
}
|
76
|
-
assert_has_class '
|
76
|
+
assert_has_class 'presence some_other_class', form_for(@bogus_item, :url => '/bogus_items') { |f|
|
77
77
|
concat f.text_area(:body, :class => 'some_other_class')
|
78
78
|
}
|
79
79
|
end
|
80
80
|
|
81
81
|
test "required :check_box" do # a.k.a. "acceptance required"
|
82
82
|
# Using helper
|
83
|
-
assert_has_class '
|
84
|
-
assert_has_class '
|
83
|
+
assert_has_class 'acceptance-accept_true', check_box(:bogus_item, :signed)
|
84
|
+
assert_has_class 'acceptance-accept_true some_other_class', check_box(:bogus_item, :signed, :class => 'some_other_class')
|
85
85
|
|
86
86
|
# Using builder
|
87
|
-
assert_has_class '
|
87
|
+
assert_has_class 'acceptance-accept_true', form_for(@bogus_item, :url => '/bogus_items') { |f|
|
88
88
|
concat f.check_box(:signed)
|
89
89
|
}
|
90
|
-
assert_has_class '
|
90
|
+
assert_has_class 'acceptance-accept_true some_other_class', form_for(@bogus_item, :url => '/bogus_items') { |f|
|
91
91
|
concat f.check_box(:signed, :class => 'some_other_class')
|
92
92
|
}
|
93
93
|
end
|
94
94
|
|
95
95
|
test "required :radio_button" do
|
96
96
|
# Using helper
|
97
|
-
assert_has_class '
|
98
|
-
assert_has_class '
|
97
|
+
assert_has_class 'presence', radio_button(:bogus_item, :variant, 1)
|
98
|
+
assert_has_class 'presence some_other_class', radio_button(:bogus_item, :variant, 1, :class => 'some_other_class')
|
99
99
|
|
100
|
-
assert_has_class '
|
100
|
+
assert_has_class 'presence', form_for(@bogus_item, :url => '/bogus_items') { |f|
|
101
101
|
concat f.radio_button(:variant, 1)
|
102
102
|
}
|
103
|
-
assert_has_class '
|
103
|
+
assert_has_class 'presence some_other_class', form_for(@bogus_item, :url => '/bogus_items') { |f|
|
104
104
|
concat f.radio_button(:variant, 1, :class => 'some_other_class')
|
105
105
|
}
|
106
106
|
end
|
@@ -16,7 +16,7 @@ class ValidatorTest < ::ActiveSupport::TestCase
|
|
16
16
|
end
|
17
17
|
end
|
18
18
|
|
19
|
-
test "creating an empty validator - and generate valid v2.Validator
|
19
|
+
test "creating an empty validator - and generate valid v2.Validator and class call" do
|
20
20
|
assert_equal 'dummie', @empty_validator.name
|
21
21
|
assert_equal '', @empty_validator.message
|
22
22
|
assert_equal ([]), @empty_validator.params
|
@@ -30,10 +30,12 @@ class ValidatorTest < ::ActiveSupport::TestCase
|
|
30
30
|
name: "dummie"
|
31
31
|
});'
|
32
32
|
|
33
|
-
assert_equal
|
33
|
+
assert_equal @custom_validator.name, @custom_validator.to_class
|
34
|
+
assert_equal "#{@custom_validator.name}_1_hello_2", @custom_validator.to_class(1, "hello", 2)
|
35
|
+
assert_equal expected_v2_validator.gsub(/[\n\s\t]/, ''), @empty_validator.to_js.gsub(/[\n\s\t]/, '')
|
34
36
|
end
|
35
37
|
|
36
|
-
test "creating a custom validator - and generate valid v2.Validator
|
38
|
+
test "creating a custom validator - and generate valid v2.Validator and class call" do
|
37
39
|
assert_equal 'dummie', @custom_validator.name
|
38
40
|
assert_equal 'Fail, fail, fail!', @custom_validator.message
|
39
41
|
assert_equal (["some", "params"]), @custom_validator.params
|
@@ -50,7 +52,9 @@ class ValidatorTest < ::ActiveSupport::TestCase
|
|
50
52
|
params: ["some", "params"]
|
51
53
|
});'
|
52
54
|
|
53
|
-
assert_equal
|
55
|
+
assert_equal @custom_validator.name, @custom_validator.to_class
|
56
|
+
assert_equal "#{@custom_validator.name}_1_hello_2", @custom_validator.to_class(1, "hello", 2)
|
57
|
+
assert_equal expected_v2_validator.gsub(/[\n\s\t]/, ''), @custom_validator.to_js.gsub(/[\n\s\t]/, '')
|
54
58
|
end
|
55
59
|
|
56
60
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: validatious-on-rails
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3.
|
4
|
+
version: 0.3.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Christian Johansen
|
@@ -10,7 +10,7 @@ autorequire:
|
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
12
|
|
13
|
-
date: 2009-10-
|
13
|
+
date: 2009-10-08 00:00:00 +02:00
|
14
14
|
default_executable:
|
15
15
|
dependencies: []
|
16
16
|
|
@@ -35,6 +35,8 @@ extra_rdoc_files:
|
|
35
35
|
- lib/validatious-on-rails/validatious/remote_validator.rb
|
36
36
|
- lib/validatious-on-rails/validatious/validator.rb
|
37
37
|
- lib/validatious-on-rails/validatious/validators.rb
|
38
|
+
- lib/validatious-on-rails/validatious/validators/acceptance_validator.rb
|
39
|
+
- lib/validatious-on-rails/validatious/validators/confirmation_validator.rb
|
38
40
|
- lib/validatious-on-rails/validatious/validators/exclusion_validator.rb
|
39
41
|
- lib/validatious-on-rails/validatious/validators/format_validator.rb
|
40
42
|
- lib/validatious-on-rails/validatious/validators/inclusion_validator.rb
|
@@ -49,6 +51,7 @@ extra_rdoc_files:
|
|
49
51
|
- lib/validatious-on-rails/validatious/validators/numericality/less_than_validator.rb
|
50
52
|
- lib/validatious-on-rails/validatious/validators/numericality/odd_validator.rb
|
51
53
|
- lib/validatious-on-rails/validatious/validators/numericality/only_integer_validator.rb
|
54
|
+
- lib/validatious-on-rails/validatious/validators/presence_validator.rb
|
52
55
|
- rails/init.rb
|
53
56
|
- test/test_helper.rb
|
54
57
|
- test/validatious_on_rails/helpers_test.rb
|
@@ -71,6 +74,8 @@ files:
|
|
71
74
|
- lib/validatious-on-rails/validatious/remote_validator.rb
|
72
75
|
- lib/validatious-on-rails/validatious/validator.rb
|
73
76
|
- lib/validatious-on-rails/validatious/validators.rb
|
77
|
+
- lib/validatious-on-rails/validatious/validators/acceptance_validator.rb
|
78
|
+
- lib/validatious-on-rails/validatious/validators/confirmation_validator.rb
|
74
79
|
- lib/validatious-on-rails/validatious/validators/exclusion_validator.rb
|
75
80
|
- lib/validatious-on-rails/validatious/validators/format_validator.rb
|
76
81
|
- lib/validatious-on-rails/validatious/validators/inclusion_validator.rb
|
@@ -85,6 +90,7 @@ files:
|
|
85
90
|
- lib/validatious-on-rails/validatious/validators/numericality/less_than_validator.rb
|
86
91
|
- lib/validatious-on-rails/validatious/validators/numericality/odd_validator.rb
|
87
92
|
- lib/validatious-on-rails/validatious/validators/numericality/only_integer_validator.rb
|
93
|
+
- lib/validatious-on-rails/validatious/validators/presence_validator.rb
|
88
94
|
- rails/init.rb
|
89
95
|
- test/test_helper.rb
|
90
96
|
- test/validatious_on_rails/helpers_test.rb
|
@@ -116,7 +122,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
116
122
|
requirements: []
|
117
123
|
|
118
124
|
rubyforge_project:
|
119
|
-
rubygems_version: 1.3.
|
125
|
+
rubygems_version: 1.3.5
|
120
126
|
signing_key:
|
121
127
|
specification_version: 3
|
122
128
|
summary: Rails plugin that maps model validations to class names on form elements to integrate with Validatious.
|