client_side_validations 19.1.0 → 20.0.2

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 4e5904433f3b766e4544605c251a50c28349fbad906456b4823e19ea2700aef1
4
- data.tar.gz: 0d3fe57c177d373237ce63c2f905fd2c907579c268e550134f3d954a2b72df61
3
+ metadata.gz: 947a8c3e977a52425b7d60ca031c38ba6aa0e22534704859cf10330f42fc7c64
4
+ data.tar.gz: 120c000d994694b6cf98ceb28ed40507a43e28132563a1d03f43dde3bcf9a272
5
5
  SHA512:
6
- metadata.gz: 51f6b2a441831cb479f267a04627badde3d6478f733b7a66792ca9df0e3f4eb403fed52210a7c2001c855b697d9cfeb14f51eb222aadc21b392bebf71d4ad903
7
- data.tar.gz: bf6196647cba2846209dd206e2e3bc1eec79f4e07f66720996c1761670288cd8496fcef2a5e620faea34cf8225dfc2856f9eb480773755c9b28dc6acb4ab03e4
6
+ metadata.gz: 82dadc40eac82e9b38fca023d4732a8f6a3d835bc29f5b41ffa68345b8366a797c3a224ac0af0c8f50bc0067361c527741cf43bbf0d07779309134914c80231e
7
+ data.tar.gz: 125ae43cbb60726874f2ddba6aec7f355ebfb4e5a0e6cf7218cb42b9abb55d100e03f464a835b0b7490bc9232d55f73361cb759a0a3533b758ee0464b87b8717
data/CHANGELOG.md CHANGED
@@ -1,5 +1,24 @@
1
1
  # Changelog
2
2
 
3
+ ## 20.0.2 / 2021-12-22
4
+
5
+ * [BUGFIX] Fix Rails 7.0 compatibility ([#869](https://github.com/DavyJonesLocker/client_side_validations/issues/869))
6
+
7
+ ## 20.0.1 / 2021-12-22
8
+
9
+ * [BUGFIX] Fix missing HTTP method ([#867](https://github.com/DavyJonesLocker/client_side_validations/issue/867))
10
+ * [ENHANCEMENT] Update development dependencies
11
+
12
+ ## 20.0.0 / 2021-12-16
13
+
14
+ * [FEATURE] Add Rails 7 compatibility - POSSIBLE BREAKING CHANGE ([#862](https://github.com/DavyJonesLocker/client_side_validations/pull/862))
15
+ * [ENHANCEMENT] Update development dependencies
16
+
17
+ ## 19.1.1 / 2021-11-15
18
+
19
+ * [ENHANCEMENT] Require MFA to publish gems
20
+ * [ENHANCEMENT] Update development dependencies
21
+
3
22
  ## 19.1.0 / 2021-10-05
4
23
 
5
24
  * [FEATURE] Add Turbo compatibility ([#849](https://github.com/DavyJonesLocker/client_side_validations/pull/849))
data/README.md CHANGED
@@ -2,13 +2,13 @@
2
2
 
3
3
  [![Gem Version](https://badge.fury.io/rb/client_side_validations.svg)](https://badge.fury.io/rb/client_side_validations)
4
4
  [![npm version](https://badge.fury.io/js/%40client-side-validations%2Fclient-side-validations.svg)](https://badge.fury.io/js/%40client-side-validations%2Fclient-side-validations)
5
- [![SemVer](https://api.dependabot.com/badges/compatibility_score?dependency-name=client_side_validations&package-manager=bundler&version-scheme=semver)](https://dependabot.com/compatibility-score.html?dependency-name=client_side_validations&package-manager=bundler&version-scheme=semver)
6
- [![Build Status](https://github.com/DavyJonesLocker/client_side_validations/actions/workflows/ruby.yml/badge.svg)](https://github.com/DavyJonesLocker/client_side_validations/actions)
5
+ [![Ruby Build Status](https://github.com/DavyJonesLocker/client_side_validations/actions/workflows/ruby.yml/badge.svg)](https://github.com/DavyJonesLocker/client_side_validations/actions)
6
+ [![JavaScript Build Status](https://github.com/DavyJonesLocker/client_side_validations/actions/workflows/javascript.yml/badge.svg)](https://github.com/DavyJonesLocker/client_side_validations/actions)
7
7
  [![Maintainability](https://api.codeclimate.com/v1/badges/9f9e8bb6edc92615f34e/maintainability)](https://codeclimate.com/github/DavyJonesLocker/client_side_validations/maintainability)
8
8
  [![Coverage Status](https://coveralls.io/repos/github/DavyJonesLocker/client_side_validations/badge.svg?branch=main)](https://coveralls.io/github/DavyJonesLocker/client_side_validations?branch=main)
9
9
 
10
10
 
11
- `ClientSideValidations` made easy for your Rails 5.2 / Rails 6.x applications!
11
+ `ClientSideValidations` made easy for your Rails 5.2 / 6.x / 7.0 applications!
12
12
 
13
13
  ## Project Goals ##
14
14
 
@@ -78,17 +78,17 @@ import '@client-side-validations/client-side-validations/src'
78
78
  require('@client-side-validations/client-side-validations')
79
79
  ```
80
80
 
81
- ##### Heads-up for Turbolinks users #####
81
+ ##### Heads-up for Turbo and Turbolinks users #####
82
+
83
+ If you are using [Turbo](https://github.com/hotwired/turbo-rails), use the
84
+ `import` syntax and make sure that `@client-side-validations/client-side-validations/src`
85
+ is imported **after** `@hotwired/turbo-rails`, so ClientSideValidations can properly detect
86
+ `window.Turbo` and attach its event handlers.
82
87
 
83
88
  If you are using [Turbolinks](https://github.com/turbolinks/turbolinks) 5.2,
84
- use the require syntax and make sure that `@client-side-validations/client-side-validations`
85
- is required after`Turbolinks.start()`, so ClientSideValidations can properly
86
- attach its event handlers.
87
-
88
- [Turbo](https://github.com/hotwired/turbo-rails) automatically calls `start()`,
89
- so you can use the `import` syntax. Just make sure that `@client-side-validations/client-side-validations/src`
90
- is imported **after** `turbo`, so ClientSideValidations can properly
91
- attach its event handlers.
89
+ use the `require` syntax and make sure that `@client-side-validations/client-side-validations`
90
+ is required **after** `Turbolinks.start()`, so ClientSideValidations can properly
91
+ detect `window.Turbolinks` and attach its event handlers.
92
92
 
93
93
  #### When using Sprockets ####
94
94
 
@@ -22,15 +22,15 @@ module ClientSideValidations
22
22
  end
23
23
 
24
24
  def initialize(object_name, object, template, options)
25
- super(object_name, object, template, options)
25
+ super
26
26
  @options[:validators] = { object => {} }
27
27
  end
28
28
 
29
29
  def client_side_form_settings(_options, form_helper)
30
30
  {
31
31
  type: self.class.to_s,
32
- input_tag: form_helper.class.field_error_proc.call(%(<span id="input_tag"></span>), Struct.new(:error_message, :tag_id).new([], '')),
33
- label_tag: form_helper.class.field_error_proc.call(%(<label id="label_tag"></label>), Struct.new(:error_message, :tag_id).new([], ''))
32
+ input_tag: error_field(form_helper, :span, 'input_tag'),
33
+ label_tag: error_field(form_helper, :label, 'label_tag')
34
34
  }
35
35
  end
36
36
 
@@ -45,7 +45,7 @@ module ClientSideValidations
45
45
  def check_box(method, options = {}, checked_value = '1', unchecked_value = '0')
46
46
  build_validation_options(method, options)
47
47
  options.delete(:validate)
48
- super(method, options, checked_value, unchecked_value)
48
+ super
49
49
  end
50
50
 
51
51
  %i[collection_check_boxes collection_radio_buttons].each do |method_name|
@@ -59,7 +59,7 @@ module ClientSideValidations
59
59
  def collection_select(method, collection, value_method, text_method, options = {}, html_options = {})
60
60
  build_validation_options(method, html_options.merge(name: options[:name]))
61
61
  html_options.delete(:validate)
62
- super(method, collection, value_method, text_method, options, html_options)
62
+ super
63
63
  end
64
64
 
65
65
  def fields_for(record_name, record_object = nil, fields_options = {}, &block)
@@ -69,46 +69,52 @@ module ClientSideValidations
69
69
  end
70
70
 
71
71
  fields_options[:validate] ||= @options[:validate] if @options[:validate] && !fields_options.key?(:validate)
72
- super(record_name, record_object, fields_options, &block)
72
+ super
73
73
  end
74
74
 
75
75
  def fields(scope = nil, model: nil, **options, &block)
76
76
  options[:validate] ||= @options[:validate] if @options[:validate] && !options.key?(:validate)
77
- super(scope, model: model, **options, &block)
77
+ super
78
78
  end
79
79
 
80
80
  def file_field(method, options = {})
81
81
  build_validation_options(method, options)
82
82
  options.delete(:validate)
83
- super(method, options)
83
+ super
84
84
  end
85
85
 
86
86
  def grouped_collection_select(method, collection, group_method, group_label_method, option_key_method, option_value_method, options = {}, html_options = {})
87
87
  build_validation_options(method, html_options.merge(name: options[:name]))
88
88
  html_options.delete(:validate)
89
- super(method, collection, group_method, group_label_method, option_key_method, option_value_method, options, html_options)
89
+ super
90
90
  end
91
91
 
92
92
  def radio_button(method, tag_value, options = {})
93
93
  build_validation_options(method, options)
94
94
  options.delete(:validate)
95
- super(method, tag_value, options)
95
+ super
96
96
  end
97
97
 
98
98
  def select(method, choices = nil, options = {}, html_options = {}, &block)
99
99
  build_validation_options(method, html_options.merge(name: options[:name]))
100
100
  html_options.delete(:validate)
101
- super(method, choices, options, html_options, &block)
101
+ super
102
102
  end
103
103
 
104
104
  def time_zone_select(method, priority_zones = nil, options = {}, html_options = {})
105
105
  build_validation_options(method, html_options.merge(name: options[:name]))
106
106
  html_options.delete(:validate)
107
- super(method, priority_zones, options, html_options)
107
+ super
108
108
  end
109
109
 
110
110
  private
111
111
 
112
+ def error_field(form_helper, tag, id)
113
+ form_helper.instance_exec form_helper.content_tag(tag, nil, id: id),
114
+ Struct.new(:error_message, :tag_id).new([], ''),
115
+ &form_helper.class.field_error_proc
116
+ end
117
+
112
118
  def build_validation_options(method, options = {})
113
119
  return unless @options[:validate]
114
120
 
@@ -15,35 +15,42 @@ module ClientSideValidations
15
15
  # So we basically reimplement the whole form_for method
16
16
  raise ArgumentError, 'Missing block' unless block
17
17
 
18
- html_options = options[:html] ||= {}
18
+ options[:html] ||= {}
19
19
 
20
20
  # Moving the switch statement to another method to
21
21
  # lower complexity
22
- object, object_name = check_record(record, options)
22
+ model, object_name = check_record(record, options)
23
23
 
24
- @validators = {}
24
+ remote = options.delete(:remote)
25
25
 
26
- apply_html_options! options, html_options
27
-
28
- builder = instantiate_builder(object_name, object, options)
29
- output = capture(builder, &block)
30
- html_options[:multipart] ||= builder.multipart?
26
+ if remote && !embed_authenticity_token_in_remote_forms && options[:authenticity_token].blank?
27
+ options[:authenticity_token] = false
28
+ end
31
29
 
32
- build_bound_validators! options
30
+ options[:model] = model
31
+ options[:scope] = object_name
32
+ options[:local] = !remote
33
+ options[:skip_default_ids] = false
34
+ options[:allow_method_names_outside_object] = options.fetch(:allow_method_names_outside_object, false)
33
35
 
34
- apply_csv_html_options! html_options, options, builder
35
- html_options = html_options_for_form(options[:url] || {}, html_options)
36
- form_tag_with_body(html_options, output)
36
+ form_with(**options, &block)
37
37
  end
38
38
 
39
- def apply_form_for_options!(record, object, options)
40
- super
39
+ def apply_csv_form_for_options!(record, object, options)
41
40
  options[:html][:validate] = true if options[:validate]
41
+ options[:html][:method] ||= options[:method]
42
+
43
+ if method(:apply_form_for_options!).arity == 2
44
+ apply_form_for_options! object, options
45
+ else
46
+ apply_form_for_options! record, object, options
47
+ end
42
48
  end
43
49
 
44
50
  def fields_for(record_name, record_object = nil, options = {}, &block)
45
51
  # Order matters here. Rails mutates the `options` object
46
- output = super
52
+ builder = instantiate_builder(record_name, record_object, options)
53
+ output = capture(builder, &block)
47
54
 
48
55
  build_bound_validators! options
49
56
 
@@ -61,10 +68,10 @@ module ClientSideValidations
61
68
  raise ArgumentError, 'First argument in form cannot contain nil or be empty' unless object
62
69
 
63
70
  object_name = options[:as] || model_name_from_record_or_class(object).param_key
64
- apply_form_for_options!(record, object, options)
71
+ apply_csv_form_for_options!(record, object, options)
65
72
  end
66
73
 
67
- [object, object_name]
74
+ [record, object_name]
68
75
  end
69
76
 
70
77
  def build_bound_validators!(options)
@@ -121,19 +128,8 @@ module ClientSideValidations
121
128
  end
122
129
  end
123
130
 
124
- def apply_html_options!(options, html_options)
125
- # Turn off HTML5 validations
126
- html_options[:novalidate] = 'novalidate'
127
-
128
- html_options[:data] = options.delete(:data) if options.key?(:data)
129
- html_options[:remote] = options.delete(:remote) if options.key?(:remote)
130
- html_options[:method] = options.delete(:method) if options.key?(:method)
131
- html_options[:enforce_utf8] = options.delete(:enforce_utf8) if options.key?(:enforce_utf8)
132
- html_options[:authenticity_token] = options.delete(:authenticity_token)
133
- end
134
-
135
131
  def apply_csv_html_options!(html_options, options, builder)
136
- html_options.delete :validate
132
+ html_options.delete 'validate'
137
133
 
138
134
  csv_options = {
139
135
  html_settings: builder.client_side_form_settings(options, self),
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module ClientSideValidations
4
- VERSION = '19.1.0'
4
+ VERSION = '20.0.2'
5
5
  end
@@ -9,6 +9,9 @@
9
9
 
10
10
  # Uncomment the following block if you want each input field to have the validation messages attached.
11
11
  #
12
+ # Alternatively, for a cleaner approach, it is possible to set
13
+ # `config.action_view.field_error_proc` in the application configuration
14
+ #
12
15
  # Note: client_side_validation requires the error to be encapsulated within
13
16
  # <label for="#{instance.send(:tag_id)}" class="message"></label>
14
17
  #
@@ -17,17 +17,11 @@
17
17
  function _typeof(obj) {
18
18
  "@babel/helpers - typeof";
19
19
 
20
- if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") {
21
- _typeof = function (obj) {
22
- return typeof obj;
23
- };
24
- } else {
25
- _typeof = function (obj) {
26
- return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj;
27
- };
28
- }
29
-
30
- return _typeof(obj);
20
+ return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) {
21
+ return typeof obj;
22
+ } : function (obj) {
23
+ return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj;
24
+ }, _typeof(obj);
31
25
  }
32
26
 
33
27
  var ClientSideValidations = {
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: 19.1.0
4
+ version: 20.0.2
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: 2021-10-05 00:00:00.000000000 Z
12
+ date: 2021-12-22 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rails
@@ -20,7 +20,7 @@ dependencies:
20
20
  version: '5.2'
21
21
  - - "<"
22
22
  - !ruby/object:Gem::Version
23
- version: '7.0'
23
+ version: '7.1'
24
24
  type: :runtime
25
25
  prerelease: false
26
26
  version_requirements: !ruby/object:Gem::Requirement
@@ -30,7 +30,7 @@ dependencies:
30
30
  version: '5.2'
31
31
  - - "<"
32
32
  - !ruby/object:Gem::Version
33
- version: '7.0'
33
+ version: '7.1'
34
34
  - !ruby/object:Gem::Dependency
35
35
  name: js_regex
36
36
  requirement: !ruby/object:Gem::Requirement
@@ -133,22 +133,16 @@ dependencies:
133
133
  name: simplecov
134
134
  requirement: !ruby/object:Gem::Requirement
135
135
  requirements:
136
- - - ">="
137
- - !ruby/object:Gem::Version
138
- version: 0.18.5
139
- - - "<"
136
+ - - "~>"
140
137
  - !ruby/object:Gem::Version
141
- version: '0.22'
138
+ version: 0.21.2
142
139
  type: :development
143
140
  prerelease: false
144
141
  version_requirements: !ruby/object:Gem::Requirement
145
142
  requirements:
146
- - - ">="
147
- - !ruby/object:Gem::Version
148
- version: 0.18.5
149
- - - "<"
143
+ - - "~>"
150
144
  - !ruby/object:Gem::Version
151
- version: '0.22'
145
+ version: 0.21.2
152
146
  - !ruby/object:Gem::Dependency
153
147
  name: simplecov-lcov
154
148
  requirement: !ruby/object:Gem::Requirement
@@ -265,6 +259,7 @@ homepage: https://github.com/DavyJonesLocker/client_side_validations
265
259
  licenses:
266
260
  - MIT
267
261
  metadata:
262
+ rubygems_mfa_required: 'true'
268
263
  bug_tracker_uri: https://github.com/DavyJonesLocker/client_side_validations/issues
269
264
  changelog_uri: https://github.com/DavyJonesLocker/client_side_validations/blob/main/CHANGELOG.md
270
265
  source_code_uri: https://github.com/DavyJonesLocker/client_side_validations