class FortyFacets::SqlFacetFilterDefinition::ScopeFacetFilter

Public Instance Methods

add(value) click to toggle source
# File lib/forty_facets/filter/sql_facet_filter_definition.rb, line 50
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/sql_facet_filter_definition.rb, line 27
def build_scope
  return Proc.new { |base| base } if empty?

  Proc.new do |base|
    # intersection of values and definition queries
    base.where(selected_queries.values.map do |query|
      "(#{query})"
    end.join(" OR "))
  end
end
facet() click to toggle source
# File lib/forty_facets/filter/sql_facet_filter_definition.rb, line 57
def facet
  query = definition.queries.map do |key, sql_query|
    "(#{sql_query}) as #{key}"
  end.join(", ")
  query += ", count(*) as occurrences"
  
  counts = without.result.reorder("")
    .select(query)
    .group(definition.queries.keys)
  counts = counts.joins(definition.joins) if definition.joins
  counts.includes_values = []

  result = {}

  counts.map do |count|
    definition.queries.each do |key, _|
      result[key] ||= 0
      if [1, "1", true].include?(count[key])
        result[key] += count.occurrences
      end
    end
  end

  result.map do |key, count|
    key = key.to_sym
    is_selected = selected_queries.keys.include?(key)
    FacetValue.new(key, count, is_selected)
  end
end
remove(value) click to toggle source
# File lib/forty_facets/filter/sql_facet_filter_definition.rb, line 42
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/sql_facet_filter_definition.rb, line 38
def selected
  values
end
values() click to toggle source
# File lib/forty_facets/filter/sql_facet_filter_definition.rb, line 23
def values
  @values ||= Array.wrap(value).sort.uniq
end

Private Instance Methods

selected_queries() click to toggle source
# File lib/forty_facets/filter/sql_facet_filter_definition.rb, line 89
def selected_queries
  @selected_queries ||= definition.queries.select do |key, _|
    values.map(&:to_sym).include? key
  end
end