client_side_validations 2.3.0 → 2.4.0
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/README.markdown
CHANGED
@@ -44,7 +44,7 @@ This will copy client_side_validations.js to "public/javascripts"
|
|
44
44
|
Currently only [jquery.validate](http://bassistance.de/jquery-plugins/jquery-plugin-validation/) is supported so you will need to download [jQuery](http://docs.jquery.com/Downloading_jQuery) and the jQuery Validate plugin to "public/javascripts"
|
45
45
|
|
46
46
|
### Rack
|
47
|
-
If you want to validate_uniqueness_of a call to the server must be made. You can do this
|
47
|
+
If you want to validate_uniqueness_of a call to the server must be made. You can do this with the ClidenSideValidations::Uniqueness middleware.
|
48
48
|
|
49
49
|
The following route will be reserved for client side validations:
|
50
50
|
|
@@ -91,6 +91,20 @@ That should be it!
|
|
91
91
|
|
92
92
|
## Advanced Options
|
93
93
|
|
94
|
+
### Initialization
|
95
|
+
[jquery.validate can be customized by setting various options](http://docs.jquery.com/Plugins/Validation/validate#toptions)
|
96
|
+
|
97
|
+
Create config/initializers/client_side_validations.rb
|
98
|
+
|
99
|
+
An example set of default options can look like:
|
100
|
+
|
101
|
+
ClientSideValidations.default_options = {
|
102
|
+
:onkeyup => "false",
|
103
|
+
:errorClass => %{"validation_errors"}
|
104
|
+
}
|
105
|
+
|
106
|
+
You'll notice that for :errorClass a string is being set inside of a string. This is necessary so everything gets translated to Javascript properly. (hopefully I can come up with something nicer soon)
|
107
|
+
|
94
108
|
### Model
|
95
109
|
If you want to define only specific fields for client side validations just override the validation_fields method on each model
|
96
110
|
|
@@ -106,6 +120,22 @@ If you want to define only specific fields for client side validations just over
|
|
106
120
|
end
|
107
121
|
|
108
122
|
|
123
|
+
### View
|
124
|
+
You can override the default options set in the initializer for each form:
|
125
|
+
|
126
|
+
<% form_for @book, :validations => { :options => { :errorClass => %{"bad-field"} } } do |b| %>
|
127
|
+
...
|
128
|
+
|
129
|
+
Same rules apply of a string inside a string for proper conversion to Javascript.
|
130
|
+
|
131
|
+
If you are not using an instance variable for form_for or for some reason want to use the validations from another class that can be done in two ways:
|
132
|
+
|
133
|
+
<% form_for :book, :validations => Book %>
|
134
|
+
...
|
135
|
+
|
136
|
+
<% form_for :book, :validations => { :class => Book } %>
|
137
|
+
...
|
138
|
+
|
109
139
|
Written by Brian Cardarella
|
110
140
|
|
111
141
|
Copyright (c) 2010 Democratic National Committee. See LICENSE for details.
|
@@ -11,24 +11,26 @@ module DNCLabs
|
|
11
11
|
def validation_to_hash(_attr, _options = {})
|
12
12
|
validation_hash = {}
|
13
13
|
base._validators[_attr.to_sym].each do |validation|
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
if
|
14
|
+
if can_validate?(validation)
|
15
|
+
message = get_validation_message(validation, _options[:locale])
|
16
|
+
validation.options.delete(:message)
|
17
|
+
options = get_validation_options(validation.options)
|
18
|
+
method = get_validation_method(validation.kind)
|
19
|
+
if conditional_method = remove_reserved_conditionals(options['if'])
|
20
|
+
if base.instance_eval(conditional_method.to_s)
|
21
|
+
options.delete('if')
|
22
|
+
validation_hash[method] = { 'message' => message }.merge(options)
|
23
|
+
end
|
24
|
+
elsif conditional_method = options['unless']
|
25
|
+
unless base.instance_eval(conditional_method.to_s)
|
26
|
+
options.delete('unless')
|
27
|
+
validation_hash[method] = { 'message' => message }.merge(options)
|
28
|
+
end
|
29
|
+
else
|
20
30
|
options.delete('if')
|
21
|
-
validation_hash[method] = { 'message' => message }.merge(options)
|
22
|
-
end
|
23
|
-
elsif conditional_method = options['unless']
|
24
|
-
unless base.instance_eval(conditional_method.to_s)
|
25
31
|
options.delete('unless')
|
26
32
|
validation_hash[method] = { 'message' => message }.merge(options)
|
27
33
|
end
|
28
|
-
else
|
29
|
-
options.delete('if')
|
30
|
-
options.delete('unless')
|
31
|
-
validation_hash[method] = { 'message' => message }.merge(options)
|
32
34
|
end
|
33
35
|
end
|
34
36
|
|
@@ -40,6 +42,17 @@ module DNCLabs
|
|
40
42
|
end
|
41
43
|
|
42
44
|
private
|
45
|
+
|
46
|
+
def can_validate?(validation)
|
47
|
+
if on = validation.options.delete(:on)
|
48
|
+
on = on.to_sym
|
49
|
+
(on == :save) ||
|
50
|
+
(on == :create && base.new_record?) ||
|
51
|
+
(on == :update && !base.new_record?)
|
52
|
+
else
|
53
|
+
true
|
54
|
+
end
|
55
|
+
end
|
43
56
|
|
44
57
|
def get_validation_message(validation, locale)
|
45
58
|
default = case validation.kind
|
@@ -13,22 +13,24 @@ module DNCLabs
|
|
13
13
|
def validation_to_hash(_attr, _options = {})
|
14
14
|
validation_hash = {}
|
15
15
|
base.class.reflect_on_validations_for(_attr).each do |validation|
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
if
|
22
|
-
|
16
|
+
if can_validate?(validation)
|
17
|
+
message = get_validation_message(validation, _options[:locale])
|
18
|
+
validation.options.delete(:message)
|
19
|
+
options = get_validation_options(validation.options)
|
20
|
+
method = get_validation_method(validation.macro)
|
21
|
+
if conditional_method = options['if']
|
22
|
+
if base.instance_eval(conditional_method.to_s)
|
23
|
+
options.delete('if')
|
24
|
+
validation_hash[method] = { 'message' => message }.merge(options)
|
25
|
+
end
|
26
|
+
elsif conditional_method = options['unless']
|
27
|
+
unless base.instance_eval(conditional_method.to_s)
|
28
|
+
options.delete('unless')
|
29
|
+
validation_hash[method] = { 'message' => message }.merge(options)
|
30
|
+
end
|
31
|
+
else
|
23
32
|
validation_hash[method] = { 'message' => message }.merge(options)
|
24
33
|
end
|
25
|
-
elsif conditional_method = options['unless']
|
26
|
-
unless base.instance_eval(conditional_method.to_s)
|
27
|
-
options.delete('unless')
|
28
|
-
validation_hash[method] = { 'message' => message }.merge(options)
|
29
|
-
end
|
30
|
-
else
|
31
|
-
validation_hash[method] = { 'message' => message }.merge(options)
|
32
34
|
end
|
33
35
|
end
|
34
36
|
|
@@ -40,6 +42,17 @@ module DNCLabs
|
|
40
42
|
end
|
41
43
|
|
42
44
|
private
|
45
|
+
|
46
|
+
def can_validate?(validation)
|
47
|
+
if on = validation.options.delete(:on)
|
48
|
+
on = on.to_sym
|
49
|
+
(on == :save) ||
|
50
|
+
(on == :create && base.new_record?) ||
|
51
|
+
(on == :update && !base.new_record?)
|
52
|
+
else
|
53
|
+
true
|
54
|
+
end
|
55
|
+
end
|
43
56
|
|
44
57
|
def get_validation_message(validation, locale)
|
45
58
|
default = case validation.macro.to_s
|
metadata
CHANGED
@@ -4,9 +4,9 @@ version: !ruby/object:Gem::Version
|
|
4
4
|
prerelease: false
|
5
5
|
segments:
|
6
6
|
- 2
|
7
|
-
-
|
7
|
+
- 4
|
8
8
|
- 0
|
9
|
-
version: 2.
|
9
|
+
version: 2.4.0
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- Brian Cardarella
|
@@ -14,7 +14,7 @@ autorequire:
|
|
14
14
|
bindir: bin
|
15
15
|
cert_chain: []
|
16
16
|
|
17
|
-
date: 2010-07-
|
17
|
+
date: 2010-07-10 00:00:00 -04:00
|
18
18
|
default_executable:
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|