module ActiveAdmin::Filters::ResourceExtension
Public Class Methods
# File lib/active_admin/filters/resource_extension.rb, line 6 def initialize(*) super add_filters_sidebar_section end
Public Instance Methods
Add a filter for this resource. If filters are not enabled, this method will raise a RuntimeError
@param [Symbol] attribute The attribute to filter on @param [Hash] options The set of options that are passed through to
ransack for the field definition.
# File lib/active_admin/filters/resource_extension.rb, line 59 def add_filter(attribute, options = {}) unless filters_enabled? raise RuntimeError, "Can't add a filter when filters are disabled. Enable filters with 'config.filters = true'" end @filters ||= [] @filters << options.merge({ :attribute => attribute }) end
Returns the filters for this resource. If filters are not enabled, it will always return an empty array.
@return [Array] Filters
that apply for this resource
# File lib/active_admin/filters/resource_extension.rb, line 15 def filters return [] unless filters_enabled? filter_lookup end
Setter to enable / disable filters on this resource.
Set to `nil` to inherit the setting from the namespace
# File lib/active_admin/filters/resource_extension.rb, line 23 def filters=(bool) @filters_enabled = bool end
@return [Boolean] If filters are enabled for this resource
# File lib/active_admin/filters/resource_extension.rb, line 28 def filters_enabled? @filters_enabled.nil? ? namespace.filters : @filters_enabled end
# File lib/active_admin/filters/resource_extension.rb, line 32 def preserve_default_filters! @preserve_default_filters = true end
# File lib/active_admin/filters/resource_extension.rb, line 36 def preserve_default_filters? @preserve_default_filters == true end
Remove a filter for this resource. If filters are not enabled, this method will raise a RuntimeError
@param [Symbol] attribute The attribute to not filter on
# File lib/active_admin/filters/resource_extension.rb, line 44 def remove_filter(attribute) unless filters_enabled? raise RuntimeError, "Can't remove a filter when filters are disabled. Enable filters with 'config.filters = true'" end @filters_to_remove ||= [] @filters_to_remove << attribute end
Reset the filters to use defaults
# File lib/active_admin/filters/resource_extension.rb, line 69 def reset_filters! @filters = nil @filters_to_remove = nil end
Private Instance Methods
Returns a default set of filters for the associations
# File lib/active_admin/filters/resource_extension.rb, line 97 def default_association_filters if resource_class.respond_to?(:reflections) poly, not_poly = resource_class.reflections.partition{ |_,r| r.macro == :belongs_to && r.options[:polymorphic] } filters = poly.map{ |_,r| r.foreign_type } + not_poly.map(&:first) filters.collect{ |name| { :attribute => name.to_sym } } else [] end end
Returns a default set of filters for the content columns
# File lib/active_admin/filters/resource_extension.rb, line 108 def default_content_filters if resource_class.respond_to?(:content_columns) resource_class.content_columns.collect{ |c| { :attribute => c.name.to_sym } } else [] end end
@return [Array] The array of default filters for this resource
# File lib/active_admin/filters/resource_extension.rb, line 92 def default_filters default_association_filters + default_content_filters end
Collapses the waveform, if you will, of which filters should be displayed. Removes filters and adds in default filters as desired.
# File lib/active_admin/filters/resource_extension.rb, line 78 def filter_lookup filters = @filters.try(:dup) || [] filters.push *default_filters if filters.empty? || preserve_default_filters? if @filters_to_remove @filters_to_remove.each do |attr| filters.delete_if{ |f| f.fetch(:attribute) == attr } end end filters end