Class: Symphonia::ModelFilters::DateFilter

Inherits:
Base show all
Defined in:
lib/symphonia/model_filters/date_filter.rb

Instance Attribute Summary collapse

Attributes inherited from Base

#caption, #name, #operator, #options, #query, #type, #value

Instance Method Summary collapse

Methods inherited from Base

#active?, #inspect

Constructor Details

#initialize(name, query, options = {}) ⇒ DateFilter

Returns a new instance of DateFilter.



6
7
8
9
# File 'lib/symphonia/model_filters/date_filter.rb', line 6

def initialize(name, query, options={})
  super
  @operator = 'in'
end

Instance Attribute Details

#available_valuesObject

Returns the value of attribute available_values.



4
5
6
# File 'lib/symphonia/model_filters/date_filter.rb', line 4

def available_values
  @available_values
end

Instance Method Details

#apply(scope) ⇒ Object

def operator=(o)

if o == '!'
  @operator = 'not_in'
end

end



28
29
30
31
32
# File 'lib/symphonia/model_filters/date_filter.rb', line 28

def apply(scope)
  super
  t = scope.arel_table
  scope.where(t[name].send(operator, value))
end

#form_field(_c) ⇒ Object



53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
# File 'lib/symphonia/model_filters/date_filter.rb', line 53

def form_field(_c)
  groups = available_values.inject({}) do |mem, (time, values)|
    mem[_c.t("time.#{time}")] = values.collect do |(k, _val)|
      [_c.t("query_options.filter_date.values.#{k}"), k]
    end
    mem
  end
  selected = Array(@query.active_filters[name])
  _c.(:div, class: 'row') do
    _c.select_tag("#{form_field_name}", _c.grouped_options_for_select(groups, selected), {
      class: 'form-control',
      include_blank: true,
      onchange: 'symphoniaFiltersForm.dateFilterCallback(this)'
    }) + _c.(:div, class: 'filter-custom-date clearfix input-daterange input-group inline', style: 'display: none') do
      _c.date_field_tag("#{form_field_name}_custom[to]", '', {
        placeholder: _c.t('query_options.filter_date.to'),
        class: 'form-control datepicker pull-right'
      }) +
        # _c.content_tag(:span, _c.t('query_options.filter_date.to'), class: 'input-group-addon')+
        _c.date_field_tag("#{form_field_name}_custom[from]", '', {
          placeholder: _c.t('query_options.filter_date.from'),
          class: 'form-control datepicker'
        })
    end
  end
end

#value=(q) ⇒ Object



11
12
13
14
15
16
17
18
19
20
# File 'lib/symphonia/model_filters/date_filter.rb', line 11

def value=(q)
  v = available_values.values.reduce(:merge)[q.to_sym]
  @operator = 'between' unless q == 'today'
  @value = if q == 'custom'
             data = self.query.controller.params.require(:date_from_custom).permit(:from, :to)
             v.call(data)
           else
             v.call
           end
end