class ActiveAdmin::Filters::ActiveFilter

Attributes

condition[R]
resource[R]

Public Class Methods

new(resource, condition) click to toggle source

Instantiate a ‘ActiveFilter`

@param resource [ActiveAdmin::Resource] current resource @param condition [Ransack::Nodes::Condition] applied ransack condition

# File lib/active_admin/filters/active_filter.rb, line 14
def initialize(resource, condition)
  @resource = resource
  @condition = condition
  @related_class = find_class if find_class?
end

Public Instance Methods

html_options() click to toggle source
# File lib/active_admin/filters/active_filter.rb, line 48
def html_options
  { class: "current_filter current_filter_#{condition.key}" }
end
label() click to toggle source
# File lib/active_admin/filters/active_filter.rb, line 29
def label
  translated_predicate = predicate_name.downcase
  if filter_label && filter_label.is_a?(Proc)
    "#{filter_label.call} #{translated_predicate}"
  elsif filter_label
    "#{filter_label} #{translated_predicate}"
  elsif related_class
    "#{related_class_name} #{translated_predicate}"
  else
    "#{attribute_name} #{translated_predicate}"
  end.strip
end
predicate_name() click to toggle source
# File lib/active_admin/filters/active_filter.rb, line 42
def predicate_name
  I18n.t(
    "ransack.predicates.#{condition.predicate.name}",
    default: ransack_predicate_name)
end
values() click to toggle source
# File lib/active_admin/filters/active_filter.rb, line 20
def values
  condition_values = condition.values.map(&:value)
  if related_class
    related_class.where(related_primary_key => condition_values)
  else
    condition_values
  end
end

Private Instance Methods

attribute_name() click to toggle source
# File lib/active_admin/filters/active_filter.rb, line 58
def attribute_name
  resource_class.human_attribute_name(name)
end
condition_attribute() click to toggle source

@return Ransack::Nodes::Attribute

# File lib/active_admin/filters/active_filter.rb, line 75
def condition_attribute
  condition.attributes[0]
end
filter() click to toggle source
# File lib/active_admin/filters/active_filter.rb, line 100
def filter
  resource.filters[name.to_sym] || resource.filters[condition.key.to_sym]
end
filter_label() click to toggle source
# File lib/active_admin/filters/active_filter.rb, line 68
def filter_label
  return unless filter

  filter[:label] || I18n.t(name, scope: ["formtastic", "labels"], default: nil)
end
find_class() click to toggle source

detect related class for Ransack::Nodes::Attribute

# File lib/active_admin/filters/active_filter.rb, line 92
def find_class
  if condition_attribute.klass != resource_class && condition_attribute.klass.primary_key == name.to_s
    condition_attribute.klass
  elsif predicate_association
    predicate_association.klass
  end
end
find_class?() click to toggle source
# File lib/active_admin/filters/active_filter.rb, line 87
def find_class?
  ["eq", "in"].include? condition.predicate.arel_predicate
end
find_predicate_association() click to toggle source
# File lib/active_admin/filters/active_filter.rb, line 117
def find_predicate_association
  condition_attribute.klass.reflect_on_all_associations.
    reject { |r| r.options[:polymorphic] }. #skip polymorphic
    detect { |r| r.foreign_key.to_s == name.to_s }
end
name() click to toggle source
# File lib/active_admin/filters/active_filter.rb, line 79
def name
  condition_attribute.attr_name
end
predicate_association() click to toggle source
# File lib/active_admin/filters/active_filter.rb, line 112
def predicate_association
  @predicate_association = find_predicate_association unless defined?(@predicate_association)
  @predicate_association
end
ransack_predicate_name() click to toggle source
# File lib/active_admin/filters/active_filter.rb, line 83
def ransack_predicate_name
  Ransack::Translate.predicate(condition.predicate.name)
end
resource_class() click to toggle source
# File lib/active_admin/filters/active_filter.rb, line 54
def resource_class
  resource.resource_class
end