Module: Effective::EffectiveDatatable::Dsl::Filters

Included in:
DatatableDslTool
Defined in:
app/models/effective/effective_datatable/dsl/filters.rb

Instance Method Summary collapse

Instance Method Details

#changes_columns_countObject Also known as: changes_column_count



55
56
57
# File 'app/models/effective/effective_datatable/dsl/filters.rb', line 55

def changes_columns_count
  form()
end

#filter(name = nil, value = :_no_value, as: nil, label: nil, parse: nil, required: false, **input_html) ⇒ 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
# File 'app/models/effective/effective_datatable/dsl/filters.rb', line 5

def filter(name = nil, value = :_no_value, as: nil, label: nil, parse: nil, required: false, **input_html)
  return datatable.filter if (name == nil && value == :_no_value) # This lets block methods call 'filter' and get the values

  raise 'expected second argument to be a value. the default value for this filter.' if value == :_no_value
  raise 'parse must be a Proc' if parse.present? && !parse.kind_of?(Proc)

  # Merge search
  if input_html.kind_of?(Hash) && input_html[:search].kind_of?(Hash)
    input_html = input_html.merge(input_html[:search])
  end

  # Try to guess as value
  as ||= (
    if input_html.key?(:collection)
      :select
    elsif value != nil
      Effective::Attribute.new(value).type
    end
  ) || :string

  datatable._filters[name.to_sym] = {
    value: value,
    as: as,
    label: label,
    name: name.to_sym,
    parse: parse,
    required: required,
  }.compact.reverse_merge(input_html)
end

#form(url: nil, verb: nil) ⇒ Object

This changes the filters from using an AJAX, to a POST or GET



47
48
49
50
51
52
53
# File 'app/models/effective/effective_datatable/dsl/filters.rb', line 47

def form(url: nil, verb: nil)
  url ||= request.path
  verb ||= (Rails.application.routes.recognize_path(url, method: :post).present? rescue false) ? :post : :get

  datatable._form[:url] = url
  datatable._form[:verb] = verb
end

#scope(name = nil, *args, default: nil, label: nil) ⇒ Object



35
36
37
38
39
40
41
42
43
44
# File 'app/models/effective/effective_datatable/dsl/filters.rb', line 35

def scope(name = nil, *args, default: nil, label: nil)
  return datatable.scope unless name # This lets block methods call 'scope' and get the values

  datatable._scopes[name.to_sym] = {
    default: default,
    label: label || name.to_s.titleize,
    name: name.to_sym,
    args: args.presence
  }
end