Module: ClientSideValidations::ActionView::Helpers::FormBuilder

Defined in:
lib/client_side_validations/action_view/form_builder.rb

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.prepended(base) ⇒ Object



7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
# File 'lib/client_side_validations/action_view/form_builder.rb', line 7

def self.prepended(base)
  selectors = base.field_helpers - %i[label check_box checkbox radio_button fields_for fields hidden_field file_field]

  selectors.each do |selector|
    base.class_eval <<-RUBY_EVAL, __FILE__, __LINE__ + 1
      # Cannot call super here, rewrite all
      def #{selector}(method, options = {})       # def text_field(method, options = {})
        build_validation_options(method, options) #   build_validation_options(method, options)
        options.delete(:validate)                 #   options.delete(:validate)
        @template.send(                           #   @template.send(
          #{selector.inspect},                    #     "text_field",
          @object_name,                           #     @object_name,
          method,                                 #     method,
          objectify_options(options))             #     objectify_options(options))
      end                                         # end
    RUBY_EVAL
  end

  base.class_eval do
    alias_method :text_area, :textarea if ::ActionView::Helpers::FormBuilder.field_helpers.include?(:textarea)
  end
end

Instance Method Details

#check_box(method, options = {}, checked_value = '1', unchecked_value = '0') ⇒ Object Also known as: checkbox



51
52
53
54
55
# File 'lib/client_side_validations/action_view/form_builder.rb', line 51

def check_box(method, options = {}, checked_value = '1', unchecked_value = '0')
  build_validation_options(method, options)
  options.delete(:validate)
  super
end

#client_side_form_settings(_options, form_helper) ⇒ Object



35
36
37
38
39
40
41
# File 'lib/client_side_validations/action_view/form_builder.rb', line 35

def client_side_form_settings(_options, form_helper)
  {
    type:      self.class.name,
    input_tag: error_field(form_helper, :span, 'input_tag'),
    label_tag: error_field(form_helper, :label, 'label_tag')
  }
end

#collection_select(method, collection, value_method, text_method, options = {}, html_options = {}) ⇒ Object



70
71
72
73
74
# File 'lib/client_side_validations/action_view/form_builder.rb', line 70

def collection_select(method, collection, value_method, text_method, options = {}, html_options = {})
  build_validation_options(method, html_options.merge(name: options[:name]))
  html_options.delete(:validate)
  super
end

#fields(scope = nil, model: nil, **options, &block) ⇒ Object



86
87
88
89
# File 'lib/client_side_validations/action_view/form_builder.rb', line 86

def fields(scope = nil, model: nil, **options, &block)
  options[:validate] ||= @options[:validate] if @options[:validate] && !options.key?(:validate)
  super
end

#fields_for(record_name, record_object = nil, fields_options = {}, &block) ⇒ Object



76
77
78
79
80
81
82
83
84
# File 'lib/client_side_validations/action_view/form_builder.rb', line 76

def fields_for(record_name, record_object = nil, fields_options = {}, &block)
  if record_object.is_a?(Hash) && record_object.extractable_options?
    fields_options = record_object
    record_object  = nil
  end

  fields_options[:validate] ||= @options[:validate] if @options[:validate] && !fields_options.key?(:validate)
  super
end

#file_field(method, options = {}) ⇒ Object



91
92
93
94
95
# File 'lib/client_side_validations/action_view/form_builder.rb', line 91

def file_field(method, options = {})
  build_validation_options(method, options)
  options.delete(:validate)
  super
end

#grouped_collection_select(method, collection, group_method, group_label_method, option_key_method, option_value_method, options = {}, html_options = {}) ⇒ Object



97
98
99
100
101
# File 'lib/client_side_validations/action_view/form_builder.rb', line 97

def grouped_collection_select(method, collection, group_method, group_label_method, option_key_method, option_value_method, options = {}, html_options = {})
  build_validation_options(method, html_options.merge(name: options[:name]))
  html_options.delete(:validate)
  super
end

#initialize(object_name, object, template, options) ⇒ Object



30
31
32
33
# File 'lib/client_side_validations/action_view/form_builder.rb', line 30

def initialize(object_name, object, template, options)
  super
  @options[:validators] = { object => {} }
end

#radio_button(method, tag_value, options = {}) ⇒ Object



103
104
105
106
107
# File 'lib/client_side_validations/action_view/form_builder.rb', line 103

def radio_button(method, tag_value, options = {})
  build_validation_options(method, options)
  options.delete(:validate)
  super
end

#select(method, choices = nil, options = {}, html_options = {}, &block) ⇒ Object



109
110
111
112
113
# File 'lib/client_side_validations/action_view/form_builder.rb', line 109

def select(method, choices = nil, options = {}, html_options = {}, &block)
  build_validation_options(method, html_options.merge(name: options[:name]))
  html_options.delete(:validate)
  super
end

#time_zone_select(method, priority_zones = nil, options = {}, html_options = {}) ⇒ Object



115
116
117
118
119
# File 'lib/client_side_validations/action_view/form_builder.rb', line 115

def time_zone_select(method, priority_zones = nil, options = {}, html_options = {})
  build_validation_options(method, html_options.merge(name: options[:name]))
  html_options.delete(:validate)
  super
end

#validate(*attrs) ⇒ Object



43
44
45
46
47
48
49
# File 'lib/client_side_validations/action_view/form_builder.rb', line 43

def validate(*attrs)
  options = attrs.pop if attrs.last.is_a?(Hash)
  (attrs.presence || @object._validators.keys).each do |attr|
    build_validation_options(attr, validate: options)
  end
  nil
end