module ActiveAdmin::Filters::ResourceExtension

Public Class Methods

new(*) click to toggle source
Calls superclass method
# File lib/active_admin/filters/resource_extension.rb, line 14
def initialize(*)
  super
  add_filters_sidebar_section
  add_search_status_sidebar_section
end

Public Instance Methods

add_filter(attribute, options = {}) click to toggle source

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 76
def add_filter(attribute, options = {})
  raise Disabled unless filters_enabled?

  (@filters ||= {})[attribute.to_sym] = options
end
current_filters=(bool) click to toggle source

Setter to enable/disable showing current filters on this resource.

Set to ‘nil` to inherit the setting from the namespace

# File lib/active_admin/filters/resource_extension.rb, line 38
def current_filters=(bool)
  @current_filters_enabled = bool
end
current_filters_enabled?() click to toggle source

@return [Boolean] If show current filters are enabled for this resource

# File lib/active_admin/filters/resource_extension.rb, line 48
def current_filters_enabled?
  @current_filters_enabled.nil? ? namespace.current_filters : @current_filters_enabled
end
filters() click to toggle source

Returns the filters for this resource. If filters are not enabled, it will always return an empty hash.

@return [Hash] Filters that apply for this resource

# File lib/active_admin/filters/resource_extension.rb, line 24
def filters
  filters_enabled? ? filter_lookup : {}
end
filters=(bool) click to toggle source

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 31
def filters=(bool)
  @filters_enabled = bool
end
filters_enabled?() click to toggle source

@return [Boolean] If filters are enabled for this resource

# File lib/active_admin/filters/resource_extension.rb, line 43
def filters_enabled?
  @filters_enabled.nil? ? namespace.filters : @filters_enabled
end
preserve_default_filters!() click to toggle source
# File lib/active_admin/filters/resource_extension.rb, line 52
def preserve_default_filters!
  @preserve_default_filters = true
end
preserve_default_filters?() click to toggle source
# File lib/active_admin/filters/resource_extension.rb, line 56
def preserve_default_filters?
  @preserve_default_filters == true
end
remove_filter(*attributes) click to toggle source

Remove a filter for this resource. If filters are not enabled, this method will raise a RuntimeError

@param [Symbol] attributes The attributes to not filter on

# File lib/active_admin/filters/resource_extension.rb, line 64
def remove_filter(*attributes)
  raise Disabled unless filters_enabled?

  attributes.each { |attribute| (@filters_to_remove ||= []) << attribute.to_sym }
end
reset_filters!() click to toggle source

Reset the filters to use defaults

# File lib/active_admin/filters/resource_extension.rb, line 83
def reset_filters!
  @filters = nil
  @filters_to_remove = nil
end

Private Instance Methods

add_filters_sidebar_section() click to toggle source
# File lib/active_admin/filters/resource_extension.rb, line 149
def add_filters_sidebar_section
  self.sidebar_sections << filters_sidebar_section
end
add_search_status_sidebar_section() click to toggle source
# File lib/active_admin/filters/resource_extension.rb, line 159
def add_search_status_sidebar_section
  if current_filters_enabled?
    self.sidebar_sections << search_status_section
  end
end
custom_ransack_filters() click to toggle source
# File lib/active_admin/filters/resource_extension.rb, line 117
def custom_ransack_filters
  if resource_class.respond_to?(:_ransackers)
    resource_class._ransackers.keys.map(&:to_sym)
  else
    []
  end
end
default_association_filters() click to toggle source

Returns a default set of filters for the associations

# File lib/active_admin/filters/resource_extension.rb, line 126
def default_association_filters
  if resource_class.respond_to?(:reflect_on_all_associations)
    poly, not_poly = resource_class.reflect_on_all_associations.partition{ |r| r.macro == :belongs_to && r.options[:polymorphic] }

    # remove deeply nested associations
    not_poly.reject!{ |r| r.chain.length > 2 }

    filters = poly.map(&:foreign_type) + not_poly.map(&:name)
    filters.map &:to_sym
  else
    []
  end
end
default_content_filters() click to toggle source

Returns a default set of filters for the content columns

# File lib/active_admin/filters/resource_extension.rb, line 141
def default_content_filters
  if resource_class.respond_to? :content_columns
    resource_class.content_columns.map{ |c| c.name.to_sym }
  else
    []
  end
end
default_filters() click to toggle source

@return [Array] The array of default filters for this resource

# File lib/active_admin/filters/resource_extension.rb, line 109
def default_filters
  result = []
  result.concat default_association_filters if namespace.include_default_association_filters
  result.concat default_content_filters
  result.concat custom_ransack_filters
  result
end
filter_lookup() click to toggle source

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 92
def filter_lookup
  filters = @filters.try(:dup) || {}

  if filters.empty? || preserve_default_filters?
    default_filters.each do |f|
      filters[f] ||= {}
    end
  end

  if @filters_to_remove
    @filters_to_remove.each &filters.method(:delete)
  end

  filters
end
filters_sidebar_section() click to toggle source
# File lib/active_admin/filters/resource_extension.rb, line 153
def filters_sidebar_section
  ActiveAdmin::SidebarSection.new :filters, only: :index, if: ->{ active_admin_config.filters.any? } do
    active_admin_filters_form_for assigns[:search], active_admin_config.filters
  end
end
search_status_section() click to toggle source
# File lib/active_admin/filters/resource_extension.rb, line 165
def search_status_section
  ActiveAdmin::SidebarSection.new I18n.t("active_admin.search_status.headline"), only: :index, if: -> { params[:q] || params[:scope] } do
    active = ActiveAdmin::Filters::Active.new(resource_class, params)

    span do
      h4 I18n.t("active_admin.search_status.current_scope"), style: 'display: inline'
      b active.scope, style: "display: inline"

      div style: "margin-top: 10px" do
        h4 I18n.t("active_admin.search_status.current_filters"), style: 'margin-bottom: 10px'
        ul do
          if active.filters.blank?
            li I18n.t("active_admin.search_status.no_current_filters")
          else
            active.filters.each do |filter|
              li do
                span filter.body
                b filter.value
              end
            end
          end
        end
      end
    end
  end
end