module Datagrid::Filters

Constants

DEFAULT_FILTER_BLOCK
FILTER_TYPES

Public Class Methods

included(base) click to toggle source

@!visibility private

# File lib/datagrid/filters.rb, line 35
def self.included(base)
  base.extend ClassMethods
  base.class_eval do

    include Datagrid::Core
    include Datagrid::Filters::CompositeFilters
    class_attribute :filters_array, default: []

  end
end
new(*args, &block) click to toggle source

@!visibility private

Calls superclass method Datagrid::Core::new
# File lib/datagrid/filters.rb, line 141
def initialize(*args, &block)
  self.filters_array = self.class.filters_array.clone
  self.filters_array.each do |filter|
    self[filter.name] = filter.default(self)
  end
  super(*args, &block)
end

Public Instance Methods

assets() click to toggle source

@!visibility private

Calls superclass method Datagrid::Core#assets
# File lib/datagrid/filters.rb, line 150
def assets
  apply_filters(super, filters)
end
default_filter() click to toggle source
# File lib/datagrid/filters.rb, line 198
def default_filter
  self.class.default_filter
end
filter_by(*filters) click to toggle source

Returns assets filtered only by specified filters Allows partial filtering

# File lib/datagrid/filters.rb, line 177
def filter_by(*filters)
  apply_filters(scope, filters.map{|f| filter_by_name(f)})
end
filter_by_name(name) click to toggle source

Returns filter object with the given name

# File lib/datagrid/filters.rb, line 171
def filter_by_name(name)
  self.class.filter_by_name(name)
end
filter_value(filter) click to toggle source

Returns filter value for given filter definition

# File lib/datagrid/filters.rb, line 155
def filter_value(filter)
  self[filter.name]
end
filter_value_as_string(name) click to toggle source

Returns string representation of filter value

# File lib/datagrid/filters.rb, line 160
def filter_value_as_string(name)
  filter = filter_by_name(name)
  value = filter_value(filter)
  if value.is_a?(Array)
    value.map {|v| filter.format(v) }.join(filter.separator)
  else
    filter.format(value)
  end
end
filters() click to toggle source

Returns all currently enabled filters

# File lib/datagrid/filters.rb, line 203
def filters
  self.class.filters.select do |filter|
    filter.enabled?(self)
  end
end
select_all(filter) click to toggle source

Sets all options as selected for a filter that has options

# File lib/datagrid/filters.rb, line 188
def select_all(filter)
  filter = find_select_filter(filter)
  self[filter.name] = select_values(filter)
end
select_options(filter) click to toggle source

Returns select options for specific filter or filter name If given filter doesn’t support select options raises ‘ArgumentError`

# File lib/datagrid/filters.rb, line 183
def select_options(filter)
  find_select_filter(filter).select(self)
end
select_values(filter) click to toggle source

Returns all values that can be set to a filter with select options

# File lib/datagrid/filters.rb, line 194
def select_values(filter)
  find_select_filter(filter).select_values(self)
end

Protected Instance Methods

apply_filters(current_scope, filters) click to toggle source
# File lib/datagrid/filters.rb, line 220
def apply_filters(current_scope, filters)
  filters.inject(current_scope) do |result, filter|
    filter.apply(self, result, filter_value(filter))
  end
end
find_select_filter(filter) click to toggle source
# File lib/datagrid/filters.rb, line 211
def find_select_filter(filter)
  filter = filter_by_name(filter)
  unless filter.class.included_modules.include?(::Datagrid::Filters::SelectOptions)
    raise ::Datagrid::ArgumentError,
      "#{self.class.name}##{filter.name} with type #{FILTER_TYPES.invert[filter.class].inspect} can not have select options"
  end
  filter
end