client_side_validations 16.2.0 → 17.0.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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +10 -0
- data/README.md +25 -7
- data/lib/client_side_validations/action_view/form_builder.rb +41 -42
- data/lib/client_side_validations/action_view/form_helper.rb +6 -3
- data/lib/client_side_validations/version.rb +1 -1
- data/lib/generators/client_side_validations/copy_assets_generator.rb +14 -7
- data/lib/generators/client_side_validations/install_generator.rb +1 -1
- data/vendor/assets/javascripts/rails.validations.js +6 -5
- metadata +17 -49
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d4bcd7d9d20f8b13d6cc5537d879d8f3f76835501d977a585898ce69ad6a6392
|
4
|
+
data.tar.gz: cb32cc92ff6d52122a7c2990e7c50cf93c4d48fb3a52bfdb51ed5e3cf1c760c2
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ea2cc5dfe1a81c6b25b7e962ea0d639e44f3e76bf392c5ce1df6db68b4658062236ec6814eb7c3d8cf9335a1f9209e4160b0acdd824b8826d1db7a9ecdde7f50
|
7
|
+
data.tar.gz: 7ecf8d894db6009a43ffb0d7084cf95e1ddd67b824b170efbf3610b2cd00aca208631159bb9510f68cafd4ca028fdf4ccb36f4c9fcb83cde446f07e21edc35b1
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,15 @@
|
|
1
1
|
# Changelog
|
2
2
|
|
3
|
+
## 17.0.0 / 2020-05-16
|
4
|
+
|
5
|
+
* [FEATURE] Drop Ruby 2.3 support
|
6
|
+
* [FEATURE] Do not require `jquery-rails` gem ([#785](https://github.com/DavyJonesLocker/client_side_validations/pull/785))
|
7
|
+
* [FEATURE] Add support for many association validations ([#783](https://github.com/DavyJonesLocker/client_side_validations/pull/783))
|
8
|
+
* [BUGFIX] Fix Rails generators ([#786](https://github.com/DavyJonesLocker/client_side_validations/pull/786))
|
9
|
+
* [BUGFIX] Do not validate dynamically disabled inputs ([#789](https://github.com/DavyJonesLocker/client_side_validations/pull/789))
|
10
|
+
* [BUGFIX] Fix removal of error messages ([#790](https://github.com/DavyJonesLocker/client_side_validations/pull/790))
|
11
|
+
* [ENHANCEMENT] Test against jQuery 3.5.1
|
12
|
+
|
3
13
|
## 16.2.0 / 2020-04-10
|
4
14
|
|
5
15
|
* [FEATURE] Add jQuery 3.5.0 compatibility ([#779](https://github.com/DavyJonesLocker/client_side_validations/pull/779))
|
data/README.md
CHANGED
@@ -2,10 +2,12 @@
|
|
2
2
|
|
3
3
|
[](https://badge.fury.io/rb/client_side_validations)
|
4
4
|
[](https://badge.fury.io/js/%40client-side-validations%2Fclient-side-validations)
|
5
|
+
[](https://dependabot.com/compatibility-score.html?dependency-name=client_side_validations&package-manager=bundler&version-scheme=semver)
|
5
6
|
[](https://travis-ci.org/DavyJonesLocker/client_side_validations)
|
6
7
|
[](https://codeclimate.com/github/DavyJonesLocker/client_side_validations/maintainability)
|
7
8
|
[](https://coveralls.io/github/DavyJonesLocker/client_side_validations?branch=master)
|
8
9
|
|
10
|
+
|
9
11
|
`ClientSideValidations` made easy for your Rails 5.x / Rails 6.0 applications!
|
10
12
|
|
11
13
|
## Project Goals ##
|
@@ -90,9 +92,26 @@ attach its event handlers.
|
|
90
92
|
|
91
93
|
#### When using Sprockets ####
|
92
94
|
|
93
|
-
|
95
|
+
Since ClientSideValidations can also be used via webpacker, it does not require
|
96
|
+
by default `jquery-rails` gem.
|
97
|
+
|
98
|
+
Make sure that `jquery-rails` is part of your bundled gems and `application.js`,
|
99
|
+
otherwise add:
|
100
|
+
|
101
|
+
```ruby
|
102
|
+
gem 'jquery-rails', '~> 4.3'
|
103
|
+
```
|
104
|
+
|
105
|
+
to your `Gemfile`, run `bundle`, and add
|
106
|
+
|
107
|
+
```js
|
108
|
+
//= require jquery
|
109
|
+
```
|
110
|
+
|
111
|
+
to your `app/assets/javascripts/application.js` file.
|
94
112
|
|
95
|
-
|
113
|
+
Then, add the following to your `app/assets/javascripts/application.js` file
|
114
|
+
after `//= require jquery`.
|
96
115
|
|
97
116
|
```js
|
98
117
|
//= require rails.validations
|
@@ -115,11 +134,10 @@ Note: If you run `copy_assets`, you will need to run it again each time you upda
|
|
115
134
|
The initializer includes a commented out `ActionView::Base.field_error_proc`.
|
116
135
|
Uncomment this to render your error messages inline with the input fields.
|
117
136
|
|
118
|
-
I recommend you not use a solution similar to `error_messages_for`. Client
|
119
|
-
Side Validations
|
120
|
-
|
121
|
-
rendered validation error messages
|
122
|
-
validation error messages please use what is in
|
137
|
+
I recommend you to not use a solution similar to `error_messages_for`. Client
|
138
|
+
Side Validations does not support this type of error rendering. If you want to
|
139
|
+
maintain consistency between the client side rendered validation error messages
|
140
|
+
and the server side rendered validation error messages please use what is in
|
123
141
|
`config/initializers/client_side_validations.rb`
|
124
142
|
|
125
143
|
## Plugins ##
|
@@ -7,21 +7,25 @@ module ClientSideValidations
|
|
7
7
|
def self.prepended(base)
|
8
8
|
(base.field_helpers - %i[label check_box radio_button fields_for hidden_field file_field]).each do |selector|
|
9
9
|
base.class_eval <<-RUBY_EVAL, __FILE__, __LINE__ + 1
|
10
|
-
|
11
|
-
|
12
|
-
options
|
13
|
-
|
14
|
-
#
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
end
|
10
|
+
# Cannot call super here, rewrite all
|
11
|
+
def #{selector}(method, options = {}) # def text_field(method, options = {})
|
12
|
+
build_validation_options(method, options) # build_validation_options(method, options)
|
13
|
+
options.delete(:validate) # options.delete(:validate)
|
14
|
+
@template.send( # @template.send(
|
15
|
+
#{selector.inspect}, # "text_field",
|
16
|
+
@object_name, # @object_name,
|
17
|
+
method, # method,
|
18
|
+
objectify_options(options)) # objectify_options(options))
|
19
|
+
end # end
|
21
20
|
RUBY_EVAL
|
22
21
|
end
|
23
22
|
end
|
24
23
|
|
24
|
+
def initialize(object_name, object, template, options)
|
25
|
+
super(object_name, object, template, options)
|
26
|
+
@options[:validators] = { object => {} }
|
27
|
+
end
|
28
|
+
|
25
29
|
def client_side_form_settings(_options, form_helper)
|
26
30
|
{
|
27
31
|
type: self.class.to_s,
|
@@ -38,9 +42,24 @@ module ClientSideValidations
|
|
38
42
|
nil
|
39
43
|
end
|
40
44
|
|
41
|
-
def
|
42
|
-
|
43
|
-
|
45
|
+
def check_box(method, options = {}, checked_value = '1', unchecked_value = '0')
|
46
|
+
build_validation_options(method, options)
|
47
|
+
options.delete(:validate)
|
48
|
+
super(method, options, checked_value, unchecked_value)
|
49
|
+
end
|
50
|
+
|
51
|
+
%i[collection_check_boxes collection_radio_buttons].each do |method_name|
|
52
|
+
define_method method_name do |method, collection, value_method, text_method, options = {}, html_options = {}, &block|
|
53
|
+
build_validation_options(method, html_options.merge(name: options[:name]))
|
54
|
+
html_options.delete(:validate)
|
55
|
+
super(method, collection, value_method, text_method, options, html_options, &block)
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
def collection_select(method, collection, value_method, text_method, options = {}, html_options = {})
|
60
|
+
build_validation_options(method, html_options.merge(name: options[:name]))
|
61
|
+
html_options.delete(:validate)
|
62
|
+
super(method, collection, value_method, text_method, options, html_options)
|
44
63
|
end
|
45
64
|
|
46
65
|
def fields_for(record_name, record_object = nil, fields_options = {}, &block)
|
@@ -53,10 +72,16 @@ module ClientSideValidations
|
|
53
72
|
super(record_name, record_object, fields_options, &block)
|
54
73
|
end
|
55
74
|
|
56
|
-
def
|
75
|
+
def file_field(method, options = {})
|
57
76
|
build_validation_options(method, options)
|
58
77
|
options.delete(:validate)
|
59
|
-
super(method, options
|
78
|
+
super(method, options)
|
79
|
+
end
|
80
|
+
|
81
|
+
def grouped_collection_select(method, collection, group_method, group_label_method, option_key_method, option_value_method, options = {}, html_options = {})
|
82
|
+
build_validation_options(method, html_options.merge(name: options[:name]))
|
83
|
+
html_options.delete(:validate)
|
84
|
+
super(method, collection, group_method, group_label_method, option_key_method, option_value_method, options, html_options)
|
60
85
|
end
|
61
86
|
|
62
87
|
def radio_button(method, tag_value, options = {})
|
@@ -71,38 +96,12 @@ module ClientSideValidations
|
|
71
96
|
super(method, choices, options, html_options, &block)
|
72
97
|
end
|
73
98
|
|
74
|
-
def collection_select(method, collection, value_method, text_method, options = {}, html_options = {})
|
75
|
-
build_validation_options(method, html_options.merge(name: options[:name]))
|
76
|
-
html_options.delete(:validate)
|
77
|
-
super(method, collection, value_method, text_method, options, html_options)
|
78
|
-
end
|
79
|
-
|
80
|
-
%i[collection_check_boxes collection_radio_buttons].each do |method_name|
|
81
|
-
define_method method_name do |method, collection, value_method, text_method, options = {}, html_options = {}, &block|
|
82
|
-
build_validation_options(method, html_options.merge(name: options[:name]))
|
83
|
-
html_options.delete(:validate)
|
84
|
-
super(method, collection, value_method, text_method, options, html_options, &block)
|
85
|
-
end
|
86
|
-
end
|
87
|
-
|
88
|
-
def grouped_collection_select(method, collection, group_method, group_label_method, option_key_method, option_value_method, options = {}, html_options = {})
|
89
|
-
build_validation_options(method, html_options.merge(name: options[:name]))
|
90
|
-
html_options.delete(:validate)
|
91
|
-
super(method, collection, group_method, group_label_method, option_key_method, option_value_method, options, html_options)
|
92
|
-
end
|
93
|
-
|
94
99
|
def time_zone_select(method, priority_zones = nil, options = {}, html_options = {})
|
95
100
|
build_validation_options(method, html_options.merge(name: options[:name]))
|
96
101
|
html_options.delete(:validate)
|
97
102
|
super(method, priority_zones, options, html_options)
|
98
103
|
end
|
99
104
|
|
100
|
-
def file_field(method, options = {})
|
101
|
-
build_validation_options(method, options)
|
102
|
-
options.delete(:validate)
|
103
|
-
super(method, options)
|
104
|
-
end
|
105
|
-
|
106
105
|
private
|
107
106
|
|
108
107
|
def build_validation_options(method, options = {})
|
@@ -99,12 +99,15 @@ module ClientSideValidations
|
|
99
99
|
if validation_hash.key?(attr)
|
100
100
|
validator_hash[name] = validation_hash[attr]
|
101
101
|
elsif attr.to_s.ends_with?('_id')
|
102
|
-
|
102
|
+
association_name = attr.to_s.gsub(/_id\Z/, '').to_sym
|
103
|
+
add_validator_with_association validator_hash, validation_hash, name, association_name
|
104
|
+
elsif attr.to_s.ends_with?('_ids')
|
105
|
+
association_name = attr.to_s.gsub(/_ids\Z/, '').pluralize.to_sym
|
106
|
+
add_validator_with_association validator_hash, validation_hash, name, association_name
|
103
107
|
end
|
104
108
|
end
|
105
109
|
|
106
|
-
def add_validator_with_association(validator_hash, validation_hash, name,
|
107
|
-
association_name = attr.to_s.gsub(/_id\Z/, '').to_sym
|
110
|
+
def add_validator_with_association(validator_hash, validation_hash, name, association_name)
|
108
111
|
return unless validation_hash.key?(association_name)
|
109
112
|
|
110
113
|
validator_hash[name] = validation_hash[association_name]
|
@@ -4,7 +4,7 @@ module ClientSideValidations
|
|
4
4
|
module Generators
|
5
5
|
class CopyAssetsGenerator < Rails::Generators::Base
|
6
6
|
def copy_javascript_asset
|
7
|
-
return unless self.class == CopyAssetsGenerator ||
|
7
|
+
return unless self.class == CopyAssetsGenerator || copy_assets?
|
8
8
|
|
9
9
|
assets.each do |asset|
|
10
10
|
source_paths << asset[:path]
|
@@ -13,7 +13,7 @@ module ClientSideValidations
|
|
13
13
|
end
|
14
14
|
|
15
15
|
def self.asset_directory
|
16
|
-
if
|
16
|
+
if sprockets?
|
17
17
|
"app#{Rails.configuration.assets.prefix}/javascripts"
|
18
18
|
else
|
19
19
|
'public/javascripts'
|
@@ -28,9 +28,16 @@ module ClientSideValidations
|
|
28
28
|
assets.map { |asset| asset[:file] }.join(', ')
|
29
29
|
end
|
30
30
|
|
31
|
-
def self.
|
32
|
-
|
33
|
-
|
31
|
+
def self.copy_assets?
|
32
|
+
!sprockets? && !webpacker?
|
33
|
+
end
|
34
|
+
|
35
|
+
def self.sprockets?
|
36
|
+
defined?(Sprockets)
|
37
|
+
end
|
38
|
+
|
39
|
+
def self.webpacker?
|
40
|
+
defined?(Webpacker)
|
34
41
|
end
|
35
42
|
|
36
43
|
def self.installation_message
|
@@ -49,8 +56,8 @@ module ClientSideValidations
|
|
49
56
|
CopyAssetsGenerator.assets
|
50
57
|
end
|
51
58
|
|
52
|
-
def
|
53
|
-
self.class.
|
59
|
+
def copy_assets?
|
60
|
+
self.class.copy_assets?
|
54
61
|
end
|
55
62
|
end
|
56
63
|
end
|
@@ -1,5 +1,5 @@
|
|
1
1
|
/*!
|
2
|
-
* Client Side Validations JS - v0.1.
|
2
|
+
* Client Side Validations JS - v0.1.4 (https://github.com/DavyJonesLocker/client_side_validations)
|
3
3
|
* Copyright (c) 2020 Geremia Taglialatela, Brian Cardarella
|
4
4
|
* Licensed under MIT (https://opensource.org/licenses/mit-license.php)
|
5
5
|
*/
|
@@ -194,10 +194,11 @@
|
|
194
194
|
},
|
195
195
|
remove: function remove(element, settings) {
|
196
196
|
var form = $(element[0].form);
|
197
|
-
var
|
198
|
-
var inputErrorField = element.closest('.' +
|
197
|
+
var inputErrorFieldClass = $(settings.input_tag).attr('class');
|
198
|
+
var inputErrorField = element.closest('.' + inputErrorFieldClass.replace(/ /g, '.'));
|
199
199
|
var label = form.find("label[for='" + element.attr('id') + "']:not(.message)");
|
200
|
-
var
|
200
|
+
var labelErrorFieldClass = $(settings.label_tag).attr('class');
|
201
|
+
var labelErrorField = label.closest('.' + labelErrorFieldClass.replace(/ /g, '.'));
|
201
202
|
|
202
203
|
if (inputErrorField[0]) {
|
203
204
|
inputErrorField.find('#' + element.attr('id')).detach();
|
@@ -726,7 +727,7 @@
|
|
726
727
|
};
|
727
728
|
|
728
729
|
var executeAllValidators = function executeAllValidators(element, validators) {
|
729
|
-
if (element.data('changed') === false) {
|
730
|
+
if (element.data('changed') === false || element.prop('disabled')) {
|
730
731
|
return;
|
731
732
|
}
|
732
733
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: client_side_validations
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 17.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Geremia Taglialatela
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2020-
|
12
|
+
date: 2020-05-16 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rails
|
@@ -31,20 +31,6 @@ dependencies:
|
|
31
31
|
- - "<"
|
32
32
|
- !ruby/object:Gem::Version
|
33
33
|
version: '6.1'
|
34
|
-
- !ruby/object:Gem::Dependency
|
35
|
-
name: jquery-rails
|
36
|
-
requirement: !ruby/object:Gem::Requirement
|
37
|
-
requirements:
|
38
|
-
- - "~>"
|
39
|
-
- !ruby/object:Gem::Version
|
40
|
-
version: '4.3'
|
41
|
-
type: :runtime
|
42
|
-
prerelease: false
|
43
|
-
version_requirements: !ruby/object:Gem::Requirement
|
44
|
-
requirements:
|
45
|
-
- - "~>"
|
46
|
-
- !ruby/object:Gem::Version
|
47
|
-
version: '4.3'
|
48
34
|
- !ruby/object:Gem::Dependency
|
49
35
|
name: js_regex
|
50
36
|
requirement: !ruby/object:Gem::Requirement
|
@@ -77,42 +63,30 @@ dependencies:
|
|
77
63
|
name: byebug
|
78
64
|
requirement: !ruby/object:Gem::Requirement
|
79
65
|
requirements:
|
80
|
-
- - "
|
81
|
-
- !ruby/object:Gem::Version
|
82
|
-
version: '10.0'
|
83
|
-
- - "<"
|
66
|
+
- - "~>"
|
84
67
|
- !ruby/object:Gem::Version
|
85
|
-
version: '
|
68
|
+
version: '11.1'
|
86
69
|
type: :development
|
87
70
|
prerelease: false
|
88
71
|
version_requirements: !ruby/object:Gem::Requirement
|
89
72
|
requirements:
|
90
|
-
- - "
|
91
|
-
- !ruby/object:Gem::Version
|
92
|
-
version: '10.0'
|
93
|
-
- - "<"
|
73
|
+
- - "~>"
|
94
74
|
- !ruby/object:Gem::Version
|
95
|
-
version: '
|
75
|
+
version: '11.1'
|
96
76
|
- !ruby/object:Gem::Dependency
|
97
77
|
name: coveralls_reborn
|
98
78
|
requirement: !ruby/object:Gem::Requirement
|
99
79
|
requirements:
|
100
|
-
- - "
|
101
|
-
- !ruby/object:Gem::Version
|
102
|
-
version: 0.14.0
|
103
|
-
- - "<"
|
80
|
+
- - "~>"
|
104
81
|
- !ruby/object:Gem::Version
|
105
|
-
version:
|
82
|
+
version: 0.16.0
|
106
83
|
type: :development
|
107
84
|
prerelease: false
|
108
85
|
version_requirements: !ruby/object:Gem::Requirement
|
109
86
|
requirements:
|
110
|
-
- - "
|
111
|
-
- !ruby/object:Gem::Version
|
112
|
-
version: 0.14.0
|
113
|
-
- - "<"
|
87
|
+
- - "~>"
|
114
88
|
- !ruby/object:Gem::Version
|
115
|
-
version:
|
89
|
+
version: 0.16.0
|
116
90
|
- !ruby/object:Gem::Dependency
|
117
91
|
name: m
|
118
92
|
requirement: !ruby/object:Gem::Requirement
|
@@ -175,14 +149,14 @@ dependencies:
|
|
175
149
|
requirements:
|
176
150
|
- - "~>"
|
177
151
|
- !ruby/object:Gem::Version
|
178
|
-
version: 0.
|
152
|
+
version: 0.83.0
|
179
153
|
type: :development
|
180
154
|
prerelease: false
|
181
155
|
version_requirements: !ruby/object:Gem::Requirement
|
182
156
|
requirements:
|
183
157
|
- - "~>"
|
184
158
|
- !ruby/object:Gem::Version
|
185
|
-
version: 0.
|
159
|
+
version: 0.83.0
|
186
160
|
- !ruby/object:Gem::Dependency
|
187
161
|
name: rubocop-performance
|
188
162
|
requirement: !ruby/object:Gem::Requirement
|
@@ -215,22 +189,16 @@ dependencies:
|
|
215
189
|
name: simplecov
|
216
190
|
requirement: !ruby/object:Gem::Requirement
|
217
191
|
requirements:
|
218
|
-
- - "
|
219
|
-
- !ruby/object:Gem::Version
|
220
|
-
version: 0.17.1
|
221
|
-
- - "<"
|
192
|
+
- - "~>"
|
222
193
|
- !ruby/object:Gem::Version
|
223
|
-
version:
|
194
|
+
version: 0.18.5
|
224
195
|
type: :development
|
225
196
|
prerelease: false
|
226
197
|
version_requirements: !ruby/object:Gem::Requirement
|
227
198
|
requirements:
|
228
|
-
- - "
|
229
|
-
- !ruby/object:Gem::Version
|
230
|
-
version: 0.17.1
|
231
|
-
- - "<"
|
199
|
+
- - "~>"
|
232
200
|
- !ruby/object:Gem::Version
|
233
|
-
version:
|
201
|
+
version: 0.18.5
|
234
202
|
- !ruby/object:Gem::Dependency
|
235
203
|
name: sqlite3
|
236
204
|
requirement: !ruby/object:Gem::Requirement
|
@@ -344,7 +312,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
344
312
|
requirements:
|
345
313
|
- - "~>"
|
346
314
|
- !ruby/object:Gem::Version
|
347
|
-
version: '2.
|
315
|
+
version: '2.4'
|
348
316
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
349
317
|
requirements:
|
350
318
|
- - ">="
|