client_side_validations 3.2.8 → 4.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (34) hide show
  1. checksums.yaml +4 -4
  2. data/HISTORY.md +46 -0
  3. data/README.md +540 -0
  4. data/lib/client_side_validations.rb +0 -1
  5. data/lib/client_side_validations/action_view.rb +4 -3
  6. data/lib/client_side_validations/action_view/form_builder.rb +101 -84
  7. data/lib/client_side_validations/action_view/form_helper.rb +99 -110
  8. data/lib/client_side_validations/action_view/form_tag_helper.rb +13 -9
  9. data/lib/client_side_validations/active_model.rb +95 -80
  10. data/lib/client_side_validations/active_model/absence.rb +11 -0
  11. data/lib/client_side_validations/active_model/acceptance.rb +7 -6
  12. data/lib/client_side_validations/active_model/exclusion.rb +4 -24
  13. data/lib/client_side_validations/active_model/format.rb +24 -23
  14. data/lib/client_side_validations/active_model/inclusion.rb +4 -23
  15. data/lib/client_side_validations/active_model/length.rb +15 -15
  16. data/lib/client_side_validations/active_model/numericality.rb +23 -22
  17. data/lib/client_side_validations/active_model/presence.rb +7 -6
  18. data/lib/client_side_validations/active_record.rb +2 -2
  19. data/lib/client_side_validations/active_record/middleware.rb +41 -39
  20. data/lib/client_side_validations/active_record/uniqueness.rb +24 -23
  21. data/lib/client_side_validations/config.rb +1 -1
  22. data/lib/client_side_validations/core_ext/range.rb +1 -2
  23. data/lib/client_side_validations/core_ext/regexp.rb +6 -4
  24. data/lib/client_side_validations/engine.rb +0 -1
  25. data/lib/client_side_validations/generators.rb +2 -3
  26. data/lib/client_side_validations/generators/rails_validations.rb +2 -3
  27. data/lib/client_side_validations/middleware.rb +17 -24
  28. data/lib/client_side_validations/version.rb +1 -1
  29. data/lib/generators/client_side_validations/copy_assets_generator.rb +7 -11
  30. data/lib/generators/client_side_validations/install_generator.rb +0 -2
  31. data/lib/generators/templates/client_side_validations/initializer.rb +1 -2
  32. data/vendor/assets/javascripts/rails.validations.js +26 -20
  33. metadata +173 -48
  34. data/client_side_validations.gemspec +0 -30
@@ -10,4 +10,3 @@ if defined?(::Rails)
10
10
  require 'client_side_validations/middleware'
11
11
  require 'client_side_validations/engine'
12
12
  end
13
-
@@ -1,5 +1,7 @@
1
- module ClientSideValidations::ActionView
2
- module Helpers
1
+ module ClientSideValidations
2
+ module ActionView
3
+ module Helpers
4
+ end
3
5
  end
4
6
  end
5
7
 
@@ -11,4 +13,3 @@ require 'client_side_validations/action_view/form_builder'
11
13
  ActionView::Base.send(:include, ClientSideValidations::ActionView::Helpers::FormHelper)
12
14
  ActionView::Base.send(:include, ClientSideValidations::ActionView::Helpers::FormTagHelper)
13
15
  ActionView::Helpers::FormBuilder.send(:include, ClientSideValidations::ActionView::Helpers::FormBuilder)
14
-
@@ -1,104 +1,121 @@
1
- module ClientSideValidations::ActionView::Helpers
2
- module FormBuilder
3
-
4
- def self.included(base)
5
- (base.field_helpers.map(&:to_s) - %w(apply_form_for_options! label check_box radio_button fields_for hidden_field)).each do |selector|
6
- base.class_eval <<-RUBY_EVAL
7
- def #{selector}_with_client_side_validations(method, options = {})
8
- build_validation_options(method, options)
9
- options.delete(:validate)
10
- #{selector}_without_client_side_validations(method, options)
1
+ module ClientSideValidations
2
+ module ActionView
3
+ module Helpers
4
+ module FormBuilder
5
+ def self.included(base)
6
+ (base.field_helpers.map(&:to_s) - %w(apply_form_for_options! label check_box radio_button fields_for hidden_field)).each do |selector|
7
+ base.class_eval <<-RUBY_EVAL
8
+ def #{selector}_with_client_side_validations(method, options = {})
9
+ build_validation_options(method, options)
10
+ options.delete(:validate)
11
+ #{selector}_without_client_side_validations(method, options)
12
+ end
13
+ RUBY_EVAL
14
+
15
+ base.class_eval { alias_method_chain selector, :client_side_validations }
11
16
  end
12
- RUBY_EVAL
13
17
 
14
- base.class_eval { alias_method_chain selector, :client_side_validations }
15
- end
18
+ base.class_eval do
19
+ alias_method_chain :initialize, :client_side_validations
20
+ alias_method_chain :fields_for, :client_side_validations
21
+ alias_method_chain :check_box, :client_side_validations
22
+ alias_method_chain :radio_button, :client_side_validations
23
+ alias_method_chain :select, :client_side_validations
24
+ alias_method_chain :collection_select, :client_side_validations
25
+ alias_method_chain :collection_check_boxes, :client_side_validations
26
+ alias_method_chain :collection_radio_buttons, :client_side_validations
27
+ alias_method_chain :grouped_collection_select, :client_side_validations
28
+ alias_method_chain :time_zone_select, :client_side_validations
29
+ end
30
+ end
16
31
 
17
- base.class_eval do
18
- alias_method_chain :initialize, :client_side_validations
19
- alias_method_chain :fields_for, :client_side_validations
20
- alias_method_chain :check_box, :client_side_validations
21
- alias_method_chain :radio_button, :client_side_validations
22
- alias_method_chain :select, :client_side_validations
23
- alias_method_chain :collection_select, :client_side_validations
24
- alias_method_chain :grouped_collection_select, :client_side_validations
25
- alias_method_chain :time_zone_select, :client_side_validations
26
-
27
- def client_side_form_settings(options, form_helper)
32
+ def client_side_form_settings(_options, form_helper)
28
33
  {
29
- :type => self.class.to_s,
30
- :input_tag => form_helper.class.field_error_proc.call(%{<span id="input_tag" />}, Struct.new(:error_message, :tag_id).new([], "")),
31
- :label_tag => form_helper.class.field_error_proc.call(%{<label id="label_tag" />}, Struct.new(:error_message, :tag_id).new([], ""))
34
+ type: self.class.to_s,
35
+ input_tag: form_helper.class.field_error_proc.call(%(<span id="input_tag" />), Struct.new(:error_message, :tag_id).new([], '')),
36
+ label_tag: form_helper.class.field_error_proc.call(%(<label id="label_tag" />), Struct.new(:error_message, :tag_id).new([], ''))
32
37
  }
33
38
  end
34
- end
35
- end
36
39
 
37
- def validate(*attrs)
38
- options = attrs.pop if attrs.last.is_a?(Hash)
39
- (attrs.present? ? attrs : @object._validators.keys).each do |attr|
40
- build_validation_options(attr, :validate => options)
41
- end
42
- nil
43
- end
40
+ def validate(*attrs)
41
+ options = attrs.pop if attrs.last.is_a?(Hash)
42
+ (attrs.present? ? attrs : @object._validators.keys).each do |attr|
43
+ build_validation_options(attr, validate: options)
44
+ end
45
+ nil
46
+ end
44
47
 
45
- def initialize_with_client_side_validations(object_name, object, template, options, proc)
46
- initialize_without_client_side_validations(object_name, object, template, options, proc)
47
- @options[:validators] = { object => {} }
48
- end
48
+ def initialize_with_client_side_validations(object_name, object, *args)
49
+ initialize_without_client_side_validations(object_name, object, *args)
50
+ @options[:validators] = { object => {} }
51
+ end
49
52
 
50
- def fields_for_with_client_side_validations(record_or_name_or_array, *args, &block)
51
- options = args.extract_options!
52
- options[:validate] ||= @options[:validate] if @options[:validate] && !options.key?(:validate)
53
- fields_for_without_client_side_validations(record_or_name_or_array, *(args << options), &block)
54
- end
53
+ def fields_for_with_client_side_validations(record_or_name_or_array, *args, &block)
54
+ options = args.extract_options!
55
+ options[:validate] ||= @options[:validate] if @options[:validate] && !options.key?(:validate)
56
+ fields_for_without_client_side_validations(record_or_name_or_array, *(args << options), &block)
57
+ end
55
58
 
56
- def check_box_with_client_side_validations(method, options = {}, checked_value = "1", unchecked_value = "0")
57
- build_validation_options(method, options)
58
- options.delete(:validate)
59
- check_box_without_client_side_validations(method, options, checked_value, unchecked_value)
60
- end
59
+ def check_box_with_client_side_validations(method, options = {}, checked_value = '1', unchecked_value = '0')
60
+ build_validation_options(method, options)
61
+ options.delete(:validate)
62
+ check_box_without_client_side_validations(method, options, checked_value, unchecked_value)
63
+ end
61
64
 
62
- def radio_button_with_client_side_validations(method, tag_value, options = {})
63
- build_validation_options(method, options)
64
- options.delete(:validate)
65
- radio_button_without_client_side_validations(method, tag_value, options)
66
- end
65
+ def radio_button_with_client_side_validations(method, tag_value, options = {})
66
+ build_validation_options(method, options)
67
+ options.delete(:validate)
68
+ radio_button_without_client_side_validations(method, tag_value, options)
69
+ end
67
70
 
68
- def select_with_client_side_validations(method, choices, options = {}, html_options = {})
69
- build_validation_options(method, html_options.merge(:name => options[:name]))
70
- html_options.delete(:validate)
71
- select_without_client_side_validations(method, choices, options, html_options)
72
- end
71
+ def select_with_client_side_validations(method, choices, options = {}, html_options = {}, &block)
72
+ build_validation_options(method, html_options.merge(name: options[:name]))
73
+ html_options.delete(:validate)
74
+ select_without_client_side_validations(method, choices, options, html_options, &block)
75
+ end
73
76
 
74
- def collection_select_with_client_side_validations(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
- collection_select_without_client_side_validations(method, collection, value_method, text_method, options, html_options)
78
- end
77
+ def collection_select_with_client_side_validations(method, collection, value_method, text_method, options = {}, html_options = {})
78
+ build_validation_options(method, html_options.merge(name: options[:name]))
79
+ html_options.delete(:validate)
80
+ collection_select_without_client_side_validations(method, collection, value_method, text_method, options, html_options)
81
+ end
79
82
 
80
- def grouped_collection_select_with_client_side_validations(method, collection, group_method, group_label_method, option_key_method, option_value_method, options = {}, html_options = {})
81
- build_validation_options(method, html_options.merge(:name => options[:name]))
82
- html_options.delete(:validate)
83
- grouped_collection_select_without_client_side_validations(method, collection, group_method, group_label_method, option_key_method, option_value_method, options, html_options)
84
- end
83
+ def collection_check_boxes_with_client_side_validations(method, collection, value_method, text_method, options = {}, html_options = {}, &block)
84
+ build_validation_options(method, html_options.merge(name: options[:name]))
85
+ html_options.delete(:validate)
86
+ collection_check_boxes_without_client_side_validations(method, collection, value_method, text_method, options, html_options, &block)
87
+ end
85
88
 
86
- def time_zone_select_with_client_side_validations(method, priority_zones = nil, options = {}, html_options = {})
87
- build_validation_options(method, html_options.merge(:name => options[:name]))
88
- html_options.delete(:validate)
89
- time_zone_select_without_client_side_validations(method, priority_zones, options, html_options)
90
- end
89
+ def collection_radio_buttons_with_client_side_validations(method, collection, value_method, text_method, options = {}, html_options = {}, &block)
90
+ build_validation_options(method, html_options.merge(name: options[:name]))
91
+ html_options.delete(:validate)
92
+ collection_radio_buttons_without_client_side_validations(method, collection, value_method, text_method, options, html_options, &block)
93
+ end
94
+
95
+ def grouped_collection_select_with_client_side_validations(method, collection, group_method, group_label_method, option_key_method, option_value_method, options = {}, html_options = {})
96
+ build_validation_options(method, html_options.merge(name: options[:name]))
97
+ html_options.delete(:validate)
98
+ grouped_collection_select_without_client_side_validations(method, collection, group_method, group_label_method, option_key_method, option_value_method, options, html_options)
99
+ end
91
100
 
92
- private
101
+ def time_zone_select_with_client_side_validations(method, priority_zones = nil, options = {}, html_options = {})
102
+ build_validation_options(method, html_options.merge(name: options[:name]))
103
+ html_options.delete(:validate)
104
+ time_zone_select_without_client_side_validations(method, priority_zones, options, html_options)
105
+ end
106
+
107
+ private
93
108
 
94
- def build_validation_options(method, options = {})
95
- if @options[:validate]
96
- index = @default_options[:index].present? ? "[#{@default_options[:index]}]" : ''
97
- name = options[:name] || "#{@object_name}#{index}[#{method}]"
98
- child_index = @options[:child_index] ? "(\\d+|#{Regexp.escape(@options[:child_index].to_s)})" : "\\d+"
99
- name = name.to_s.gsub(/_attributes\]\[#{child_index}\]/, '_attributes][]')
100
- name = "#{name}#{options[:multiple] ? "[]" : nil}"
101
- @options[:validators][@object][method] = { :name => name, :options => options[:validate] }
109
+ def build_validation_options(method, options = {})
110
+ return unless @options[:validate]
111
+
112
+ index = @default_options[:index].present? ? "[#{@default_options[:index]}]" : ''
113
+ name = options[:name] || "#{@object_name}#{index}[#{method}]"
114
+ child_index = @options[:child_index] ? "(\\d+|#{Regexp.escape(@options[:child_index].to_s)})" : '\\d+'
115
+ name = name.to_s.gsub(/_attributes\]\[#{child_index}\]/, '_attributes][]')
116
+ name = "#{name}#{options[:multiple] ? '[]' : nil}"
117
+ @options[:validators][@object][method] = { name: name, options: options[:validate] }
118
+ end
102
119
  end
103
120
  end
104
121
  end
@@ -1,146 +1,135 @@
1
- module ClientSideValidations::ActionView::Helpers
2
- module FormHelper
3
- class Error < StandardError; end
4
-
5
- def form_for(record, *args, &block)
6
- options = args.extract_options!
7
- if options[:validate]
8
-
9
- # Always turn off HTML5 Validations
10
- options[:html] ||= {}
11
- options[:html][:novalidate] = 'novalidate'
12
-
13
- case record
14
- when String, Symbol
15
- raise ClientSideValidations::ActionView::Helpers::FormHelper::Error, 'Using form_for(:name, @resource) is not supported with ClientSideValidations. Please use form_for(@resource, :as => :name) instead.'
16
- else
17
- object = record.is_a?(Array) ? record.last : record
1
+ module ClientSideValidations
2
+ module ActionView
3
+ module Helpers
4
+ module FormHelper
5
+ class Error < StandardError
18
6
  end
19
- end
20
7
 
21
- @validators = {}
8
+ def form_for(record, options = {}, &block)
9
+ fail ArgumentError, 'Missing block' unless block_given?
10
+ if options[:validate]
22
11
 
23
- # Order matters here. Rails mutates the options object
24
- html_id = options[:html][:id] if options[:html]
25
- form = super(record, *(args << options), &block)
26
- build_bound_validators(options)
27
- options[:id] = html_id if html_id
28
- script = client_side_form_settings(object, options)
12
+ # Always turn off HTML5 Validations
13
+ options[:html] ||= {}
14
+ options[:html][:novalidate] = 'novalidate'
29
15
 
30
- # Because of the load order requirement above this sub is necessary
31
- # Would be nice to not do this
32
- script = insert_validators_into_script(script)
16
+ case record
17
+ when String, Symbol
18
+ fail ClientSideValidations::ActionView::Helpers::FormHelper::Error, 'Using form_for(:name, @resource) is not supported with ClientSideValidations. Please use form_for(@resource, as: :name) instead.'
19
+ else
20
+ object = record.is_a?(Array) ? record.last : record
21
+ object_name = options[:as] || model_name_from_record_or_class(object).param_key
22
+ end
23
+ end
33
24
 
34
- if assign_script_to_content_for(options[:validate], script)
35
- form.html_safe
36
- else
37
- "#{form}#{script}".html_safe
38
- end
39
- end
25
+ @validators = {}
40
26
 
41
- def assign_script_to_content_for(name, script)
42
- if name && name != true
43
- content_for(name) { script.html_safe }
44
- true
45
- end
46
- end
27
+ # Order matters here. Rails mutates the options object
28
+ html_id = options[:html][:id] if options[:html]
29
+ form = super(record, options, &block)
30
+ options[:id] = html_id if html_id
47
31
 
48
- def apply_form_for_options!(object_or_array, options)
49
- super
50
- options[:html][:validate] = true if options[:validate]
51
- end
32
+ build_bound_validators options
33
+ builder = instantiate_builder(object_name, object, options) if object_name && object
34
+ script = client_side_form_settings(object, options, builder)
52
35
 
53
- def fields_for(record_or_name_or_array, record_object = nil, options = {}, &block)
54
- output = super
55
- build_bound_validators(options)
56
- output
57
- end
36
+ # Because of the load order requirement above this sub is necessary
37
+ # Would be nice to not do this
38
+ script = insert_validators_into_script(script)
58
39
 
59
- private
60
-
61
- def build_bound_validators(options)
62
- if @validators
63
- options[:validators].each do |key, value|
64
- if @validators.key?(key)
65
- @validators[key].merge! value
40
+ if assign_script_to_content_for(options[:validate], script)
41
+ form.html_safe
66
42
  else
67
- @validators[key] = value
43
+ "#{form}#{script}".html_safe
68
44
  end
69
45
  end
70
- end
71
- end
72
-
73
- def insert_validators_into_script(script)
74
- # There is probably a more performant way of doing this
75
- # But using String#sub has some issues. Undocumented "features"
76
- if script
77
- script = script.split(/"validator_hash"/)
78
- script = "#{script[0]}#{construct_validators.to_json}#{script[1]}"
79
- end
80
46
 
81
- script
82
- end
47
+ def assign_script_to_content_for(name, script)
48
+ return unless name && name != true
49
+ content_for(name) { script.html_safe }
50
+ true
51
+ end
83
52
 
84
- def construct_validators
85
- @validators.inject({}) do |validator_hash, object_opts|
86
- option_hash = object_opts[1].inject({}) do |option_hash, attr|
87
- option_hash.merge!(attr[0] => attr[1][:options])
53
+ def apply_form_for_options!(record, object, options)
54
+ super
55
+ options[:html][:validate] = true if options[:validate]
88
56
  end
89
57
 
90
- if object_opts[0].respond_to?(:client_side_validation_hash)
91
- validation_hash = object_opts[0].client_side_validation_hash(option_hash)
92
- else
93
- validation_hash = {}
58
+ def fields_for(record_or_name_or_array, record_object = nil, options = {}, &block)
59
+ output = super
60
+ build_bound_validators options
61
+ output
94
62
  end
95
63
 
96
- option_hash.each_key do |attr|
97
- if validation_hash[attr]
98
- validator_hash.merge!(object_opts[1][attr][:name] => validation_hash[attr])
64
+ private
65
+
66
+ def build_bound_validators(options)
67
+ return unless @validators
68
+ options[:validators].each do |key, value|
69
+ if @validators.key?(key)
70
+ @validators[key].merge! value
71
+ else
72
+ @validators[key] = value
73
+ end
99
74
  end
100
75
  end
101
76
 
102
- validator_hash
103
- end
104
- end
77
+ def insert_validators_into_script(script)
78
+ # There is probably a more performant way of doing this
79
+ # But using String#sub has some issues. Undocumented "features"
80
+ if script
81
+ script = script.split(/"validator_hash"/)
82
+ script = "#{script[0]}#{construct_validators.to_json}#{script[1]}"
83
+ end
105
84
 
106
- def client_side_form_settings(object, options)
107
- if options[:validate]
108
- builder = options[:parent_builder]
85
+ script
86
+ end
109
87
 
110
- if options[:id]
111
- var_name = options[:id]
112
- else
113
- if Rails.version >= '3.2.0'
114
- var_name = if object.respond_to?(:persisted?) && object.persisted?
115
- options[:as] ? "edit_#{options[:as]}" : [options[:namespace], dom_id(object, :edit)].compact.join("_")
116
- else
117
- options[:as] ? "new_#{options[:as]}" : [options[:namespace], dom_id(object)].compact.join("_")
88
+ def construct_validators
89
+ @validators.each_with_object({}) do |object_opts, validator_hash|
90
+ option_hash = object_opts[1].each_with_object({}) do |attr, result|
91
+ result[attr[0]] = attr[1][:options]
118
92
  end
119
- else
120
- # This is to maintain backward compatibility with Rails 3.1
121
- # see: https://github.com/rails/rails/commit/e29773f885fd500189ffd964550ae20061d745ba#commitcomment-948052
122
- var_name = if object.respond_to?(:persisted?) && object.persisted?
123
- options[:as] ? "#{options[:as]}_edit" : dom_id(object, :edit)
93
+
94
+ if object_opts[0].respond_to?(:client_side_validation_hash)
95
+ validation_hash = object_opts[0].client_side_validation_hash(option_hash)
124
96
  else
125
- options[:as] ? "#{options[:as]}_new" : dom_id(object)
97
+ validation_hash = {}
98
+ end
99
+
100
+ option_hash.each_key do |attr|
101
+ if validation_hash[attr]
102
+ validator_hash.merge!(object_opts[1][attr][:name] => validation_hash[attr])
103
+ end
126
104
  end
127
105
  end
128
106
  end
129
107
 
130
- if ClientSideValidations::Config.number_format_with_locale and defined?(I18n)
131
- number_format = I18n.t("number.format").slice(:separator, :delimiter)
132
- else
133
- number_format = {:separator=>".", :delimiter=>","}
134
- end
135
- patterns = {:numericality=>"/^(-|\\+)?(?:\\d+|\\d{1,3}(?:\\#{number_format[:delimiter]}\\d{3})+)(?:\\#{number_format[:separator]}\\d*)?$/"}
108
+ def client_side_form_settings(object, options, builder)
109
+ return unless options[:validate]
110
+ if options[:id]
111
+ var_name = options[:id]
112
+ else
113
+ var_name =
114
+ if object.respond_to?(:persisted?) && object.persisted?
115
+ options[:as] ? "edit_#{options[:as]}" : [options[:namespace], dom_id(object, :edit)].compact.join('_'.freeze)
116
+ else
117
+ options[:as] ? "new_#{options[:as]}" : [options[:namespace], dom_id(object)].compact.join('_'.freeze)
118
+ end
119
+ end
136
120
 
121
+ if ClientSideValidations::Config.number_format_with_locale && defined?(I18n)
122
+ number_format = I18n.t('number.format').slice(:separator, :delimiter)
123
+ else
124
+ number_format = { separator: '.', delimiter: ',' }
125
+ end
126
+ patterns = { numericality: "/^(-|\\+)?(?:\\d+|\\d{1,3}(?:\\#{number_format[:delimiter]}\\d{3})+)(?:\\#{number_format[:separator]}\\d*)?$/" }
137
127
 
138
- content_tag(:script) do
139
- "//<![CDATA[\nif(window.ClientSideValidations===undefined)window.ClientSideValidations={};window.ClientSideValidations.disabled_validators=#{ClientSideValidations::Config.disabled_validators.to_json};window.ClientSideValidations.number_format=#{number_format.to_json};if(window.ClientSideValidations.patterns===undefined)window.ClientSideValidations.patterns = {};window.ClientSideValidations.patterns.numericality=#{patterns[:numericality]};#{"if(window.ClientSideValidations.remote_validators_prefix===undefined)window.ClientSideValidations.remote_validators_prefix='#{(ClientSideValidations::Config.root_path).sub(/\/+\Z/,'')}';" if ClientSideValidations::Config.root_path.present? }if(window.ClientSideValidations.forms===undefined)window.ClientSideValidations.forms={};window.ClientSideValidations.forms['#{var_name}'] = #{builder.client_side_form_settings(options, self).merge(:validators => 'validator_hash').to_json};\n//]]>".html_safe
128
+ content_tag(:script) do
129
+ "//<![CDATA[\nif(window.ClientSideValidations===undefined)window.ClientSideValidations={};window.ClientSideValidations.disabled_validators=#{ClientSideValidations::Config.disabled_validators.to_json};window.ClientSideValidations.number_format=#{number_format.to_json};if(window.ClientSideValidations.patterns===undefined)window.ClientSideValidations.patterns = {};window.ClientSideValidations.patterns.numericality=#{patterns[:numericality]};#{"if(window.ClientSideValidations.remote_validators_prefix===undefined)window.ClientSideValidations.remote_validators_prefix='#{(ClientSideValidations::Config.root_path).sub(%r{/+\Z}, '')}';" if ClientSideValidations::Config.root_path.present?}if(window.ClientSideValidations.forms===undefined)window.ClientSideValidations.forms={};window.ClientSideValidations.forms['#{var_name}'] = #{builder.client_side_form_settings(options, self).merge(validators: 'validator_hash').to_json};\n//]]>".html_safe
130
+ end
140
131
  end
141
132
  end
142
133
  end
143
-
144
134
  end
145
135
  end
146
-