Class: Datagrid::Filters::BaseFilter

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

Overview

:nodoc:

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_class = 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

#grid_classObject

Returns the value of attribute grid_class.



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

def grid_class
  @grid_class
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



104
105
106
# File 'lib/datagrid/filters/base_filter.rb', line 104

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

Instance Method Details

#allow_blank?Boolean

Returns:

  • (Boolean)


96
97
98
# File 'lib/datagrid/filters/base_filter.rb', line 96

def allow_blank?
  options[:allow_blank]
end

#allow_nil?Boolean

Returns:

  • (Boolean)


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

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

#apply(grid_object, scope, value) ⇒ Object



23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
# File 'lib/datagrid/filters/base_filter.rb', line 23

def apply(grid_object, scope, value)
  return scope if unapplicable_value?(value)

  result = execute(value, scope, grid_object)

  return scope unless result
  if result.is_a?(Datagrid::Filters::DefaultFilterScope)
    result = default_filter(value, scope, grid_object)
  end
  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

#default(object = nil) ⇒ Object



64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
# File 'lib/datagrid/filters/base_filter.rb', line 64

def default(object = nil)
  unless object
    Datagrid::Utils.warn_once("#{self.class.name}#default without argument is deprecated")
  end
  default = self.options[:default]
  if default.is_a?(Symbol)
    if object.respond_to?(default)
      object.send(default)
    else
      Datagrid::Utils.warn_once(":default as a Symbol is now treated as a method name. Use String instead or -> { default } if you really want default value to be a Symbol but not a String.")
      default
    end
  elsif default.respond_to?(:call)
    Datagrid::Utils.apply_args(object, &default)
  else
    default
  end
end

#default_filter_blockObject



108
109
110
111
112
113
# File 'lib/datagrid/filters/base_filter.rb', line 108

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

#dummy?Boolean

Returns:

  • (Boolean)


123
124
125
# File 'lib/datagrid/filters/base_filter.rb', line 123

def dummy?
  options[:dummy]
end

#enabled?(grid) ⇒ Boolean

Returns:

  • (Boolean)


136
137
138
# File 'lib/datagrid/filters/base_filter.rb', line 136

def enabled?(grid)
  ::Datagrid::Utils.process_availability(grid, options[:if], options[:unless])
end

#form_builder_helper_nameObject



100
101
102
# File 'lib/datagrid/filters/base_filter.rb', line 100

def form_builder_helper_name
  self.class.form_builder_helper_name
end

#format(value) ⇒ Object



119
120
121
# File 'lib/datagrid/filters/base_filter.rb', line 119

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

#headerObject



56
57
58
59
60
61
62
# File 'lib/datagrid/filters/base_filter.rb', line 56

def header
  if header = options[:header]
    Datagrid::Utils.callable(header)
  else
    Datagrid::Utils.translate_from_namespace(:filters, grid_class, name)
  end
end

#multipleObject



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

def multiple
  Datagrid::Utils.warn_once("Filter#multiple method is deprecated. Use Filter#multiple? instead")
  multiple?
end

#multiple?Boolean

Returns:

  • (Boolean)


88
89
90
# File 'lib/datagrid/filters/base_filter.rb', line 88

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



39
40
41
42
43
44
45
46
47
48
49
50
# File 'lib/datagrid/filters/base_filter.rb', line 39

def parse_values(value)
  if multiple?
    return nil if value.nil?
    normalize_multiple_value(value).map do |v|
      parse(v)
    end
  elsif value.is_a?(Array)
    raise Datagrid::ArgumentError, "#{grid_class}##{name} filter can not accept Array argument. Use :multiple option."
  else
    parse(value)
  end
end

#separatorObject



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

def separator
  options[:multiple].is_a?(String) ? options[:multiple] : default_separator
end

#supports_range?Boolean

Returns:

  • (Boolean)


115
116
117
# File 'lib/datagrid/filters/base_filter.rb', line 115

def supports_range?
  self.class.ancestors.include?(::Datagrid::Filters::RangedFilter)
end

#typeObject



127
128
129
130
131
132
133
134
# File 'lib/datagrid/filters/base_filter.rb', line 127

def type
  Datagrid::Filters::FILTER_TYPES.each do |type, klass|
    if is_a?(klass)
      return type
    end
  end
  raise "wtf is #{inspect}"
end

#unapplicable_value?(value) ⇒ Boolean

Returns:

  • (Boolean)


19
20
21
# File 'lib/datagrid/filters/base_filter.rb', line 19

def unapplicable_value?(value)
  value.nil? ? !allow_nil? : value.blank? && !allow_blank?
end