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