Class: Datagrid::Filters::BaseFilter

Inherits:
Object
  • Object
show all
Defined in:
lib/datagrid/filters/base_filter.rb

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(grid_class, name, options = {}, &block) ⇒ BaseFilter

Returns a new instance of BaseFilter.



8
9
10
11
12
13
# File 'lib/datagrid/filters/base_filter.rb', line 8

def initialize(grid_class, name, options = {}, &block)
  self.grid = grid_class
  self.name = name
  self.options = options
  self.block = block || default_filter_block
end

Instance Attribute Details

#blockObject

Returns the value of attribute block.



6
7
8
# File 'lib/datagrid/filters/base_filter.rb', line 6

def block
  @block
end

#gridObject

Returns the value of attribute grid.



6
7
8
# File 'lib/datagrid/filters/base_filter.rb', line 6

def grid
  @grid
end

#nameObject

Returns the value of attribute name.



6
7
8
# File 'lib/datagrid/filters/base_filter.rb', line 6

def name
  @name
end

#optionsObject

Returns the value of attribute options.



6
7
8
# File 'lib/datagrid/filters/base_filter.rb', line 6

def options
  @options
end

Class Method Details

.form_builder_helper_nameObject



71
72
73
# File 'lib/datagrid/filters/base_filter.rb', line 71

def self.form_builder_helper_name
  :"datagrid_#{self.to_s.demodulize.underscore}"
end

Instance Method Details

#allow_blank?Boolean

Returns:

  • (Boolean)


63
64
65
# File 'lib/datagrid/filters/base_filter.rb', line 63

def allow_blank?
  options[:allow_blank]
end

#allow_nil?Boolean

Returns:

  • (Boolean)


59
60
61
# File 'lib/datagrid/filters/base_filter.rb', line 59

def allow_nil?
  options.has_key?(:allow_nil) ? options[:allow_nil] : options[:allow_blank]
end

#apply(grid_object, scope, value) ⇒ Object



19
20
21
22
23
24
25
26
27
28
29
30
31
32
# File 'lib/datagrid/filters/base_filter.rb', line 19

def apply(grid_object, scope, value)
  if value.nil?
    return scope if !allow_nil?
  else
    return scope if value.blank? && !allow_blank?
  end

  result = execute(value, scope, grid_object, &block)
  return scope unless result
  unless grid_object.driver.match?(result)
    raise Datagrid::FilteringError, "Can not apply #{name.inspect} filter: result #{result.inspect} no longer match #{grid_object.driver.class}."
  end
  result
end

#defaultObject



50
51
52
53
# File 'lib/datagrid/filters/base_filter.rb', line 50

def default
  default = self.options[:default]
  default.respond_to?(:call) ? default.call : default
end

#default_filter(value, scope, grid) ⇒ Object



82
83
84
85
86
87
88
89
# File 'lib/datagrid/filters/base_filter.rb', line 82

def default_filter(value, scope, grid)
  driver = grid.driver
  if !driver.has_column?(scope, name) && driver.to_scope(scope).respond_to?(name)
    driver.to_scope(scope).send(name, value)
  else
    default_filter_where(driver, scope, value)
  end
end

#default_filter_blockObject



75
76
77
78
79
80
# File 'lib/datagrid/filters/base_filter.rb', line 75

def default_filter_block
  filter = self
  lambda do |value, scope, grid|
    filter.default_filter(value, scope, grid)
  end
end

#form_builder_helper_nameObject



67
68
69
# File 'lib/datagrid/filters/base_filter.rb', line 67

def form_builder_helper_name
  self.class.form_builder_helper_name
end

#format(value) ⇒ Object



91
92
93
# File 'lib/datagrid/filters/base_filter.rb', line 91

def format(value)
  value.nil? ? nil : value.to_s
end

#headerObject



45
46
47
48
# File 'lib/datagrid/filters/base_filter.rb', line 45

def header
  options[:header] ||
    I18n.translate(self.name, :scope => "datagrid.#{grid.param_name}.filters", :default => self.name.to_s.humanize)
end

#multipleObject



55
56
57
# File 'lib/datagrid/filters/base_filter.rb', line 55

def multiple
  self.options[:multiple]
end

#parse(value) ⇒ Object

Raises:

  • (NotImplementedError)


15
16
17
# File 'lib/datagrid/filters/base_filter.rb', line 15

def parse(value)
  raise NotImplementedError, "#parse(value) suppose to be overwritten"
end

#parse_values(value) ⇒ Object



34
35
36
37
38
39
40
41
42
43
# File 'lib/datagrid/filters/base_filter.rb', line 34

def parse_values(value)
  if !self.multiple && value.is_a?(Array)
    raise Datagrid::ArgumentError, "#{grid}##{name} filter can not accept Array argument. Use :multiple option."
  end
  values = Array.wrap(value)
  values.map! do |v|
    self.parse(v)
  end
  self.multiple ? values : values.first
end