class FortyFacets::FilterDefinition

Base class for the classes storing the definition of differently behaving filters

Attributes

Public Class Methods

new(search, path, options) click to toggle source
# File lib/forty_facets/filter_definition.rb, line 8
def initialize search, path, options
  @search = search
  @path = [path].flatten
  @options = options

  init_associations
end

Public Instance Methods

qualified_column_name() click to toggle source
# File lib/forty_facets/filter_definition.rb, line 20
def qualified_column_name
  "#{table_name}.#{column_name}"
end
request_param() click to toggle source
# File lib/forty_facets/filter_definition.rb, line 16
def request_param
  path.join('-')
end

Protected Instance Methods

init_associations() click to toggle source

Walk the association path and gather required joins, table names etc.

# File lib/forty_facets/filter_definition.rb, line 27
def init_associations
  current_class = search.root_class
  current_association = nil

  joins = []

  path.each do |current_attribute|
    current_association = current_class.reflect_on_association(current_attribute)

    if current_attribute == path.last
      if current_association
        joins << current_attribute
        @column_name = current_association.foreign_key
      else
        @column_name = current_attribute.to_s
      end
    else
      joins << current_attribute
      current_class = current_association.klass
    end
  end

  @table_name = current_class.table_name
  @origin_class = current_class
  @association = current_association
  @attribute = path.last

  @joins = joins.reverse.drop(1).inject(joins.last) { |a, n| { n => a } }
end