Module: SampleFilter::ActionViewExtension

Defined in:
lib/sample_filter/action_view_extension.rb

Constant Summary collapse

TRANSLATE_PREFIX =
'sample_filter'

Instance Method Summary collapse

Instance Method Details

#form_for_filter(filter_class, options = {}, &block) ⇒ Object



5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
# File 'lib/sample_filter/action_view_extension.rb', line 5

def form_for_filter(filter_class, options = {}, &block)
  options[:as] ||= :sample_filter
  options[:block] ||= :after
  options[:html] ||= {}
  options[:html][:method] ||= :get
  options[:html][:id] ||= :sample_filter
  options[:url] ||= url_for(
    :controller => controller.controller_name,
    :action => controller.action_name
  )

  filter_params_set = filter_class.filter_params_set
  filter_params_set.update_attributes(params[options[:as]])

  prefix = filter_class.to_s.underscore
   :div, id: 'sample-filter__wrap' do
    form_for(filter_params_set, options) do |form|
      buffer = ActiveSupport::SafeBuffer.new
      buffer << capture(&block) if block_given? && options[:block].eql?(:before)
      filter_params_set.fields.each do |field|
        type = filter_params_set.type_of(field)
        buffer <<
          (:div, class: 'sample-filter__form-item') do
            (:div, form.label(field, sft(prefix, :fields, field)), class: 'sample-filter__form-label') +
            (:div, send("#{type}_tag", form, prefix, filter_params_set, field), class: 'sample-filter__form-input-wrap')
          end
      end
      buffer << capture(&block) if block_given? && options[:block].eql?(:after)
      buffer + action_buttons(prefix)
    end
  end
end