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 13
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 45
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 28
def label
  # TODO: to remind us to go back to the simpler str.downcase once we support ruby >= 2.4 only.
  translated_predicate = predicate_name.mb_chars.downcase.to_s
  if 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 40
def predicate_name
  I18n.t("active_admin.filters.predicates.#{condition.predicate.name}",
         default: ransack_predicate_name)
end
values() click to toggle source
# File lib/active_admin/filters/active_filter.rb, line 19
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 55
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 72
def condition_attribute
  condition.attributes[0]
end
filter() click to toggle source
# File lib/active_admin/filters/active_filter.rb, line 97
def filter
  resource.filters[name.to_sym]
end
filter_label() click to toggle source
# File lib/active_admin/filters/active_filter.rb, line 65
def filter_label
  return unless filter

  filter[:label]
end
find_class() click to toggle source

detect related class for Ransack::Nodes::Attribute

# File lib/active_admin/filters/active_filter.rb, line 89
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 84
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 116
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 76
def name
  condition_attribute.attr_name
end
predicate_association() click to toggle source
# File lib/active_admin/filters/active_filter.rb, line 109
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 80
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 51
def resource_class
  resource.resource_class
end