class FortyFacets::FacetFilterDefinition::AttributeFilter

Public Instance Methods

add(value) click to toggle source
# File lib/forty_facets/filter/facet_filter_definition.rb, line 83
def add(value)
  new_params = search_instance.params || {}
  old_values = new_params[definition.request_param] ||= []
  old_values << value.to_s
  search_instance.class.new_unwrapped(new_params, search_instance.root)
end
build_scope() click to toggle source
# File lib/forty_facets/filter/facet_filter_definition.rb, line 55
def build_scope
  return Proc.new { |base| base } if empty?
  Proc.new do |base|
    base.joins(definition.joins).where(definition.qualified_column_name => value)
  end
end
facet() click to toggle source
# File lib/forty_facets/filter/facet_filter_definition.rb, line 62
def facet
  my_column = definition.qualified_column_name
  query = "#{my_column} AS facet_value, count(#{my_column}) AS occurrences"
  counts = without.result(skip_ordering: true).distinct.joins(definition.joins).select(query).group(my_column)
  counts.includes_values = []
  facet = counts.map do |c|
    is_selected = selected.include?(c.facet_value)
    FacetValue.new(c.facet_value, c.occurrences, is_selected)
  end

  order_facet!(facet)
end
remove(value) click to toggle source
# File lib/forty_facets/filter/facet_filter_definition.rb, line 75
def remove(value)
  new_params = search_instance.params || {}
  old_values = new_params[definition.request_param]
  old_values.delete(value.to_s)
  new_params.delete(definition.request_param) if old_values.empty?
  search_instance.class.new_unwrapped(new_params, search_instance.root)
end
selected() click to toggle source
# File lib/forty_facets/filter/facet_filter_definition.rb, line 49
def selected
  entity = definition.origin_class
  column = entity.columns_hash[definition.attribute.to_s]
  values.map{|v| entity.connection.type_cast(v, column)}
end