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