From 4bd16f053847f2efe347ebda9136ef2233ee0d2c Mon Sep 17 00:00:00 2001 From: hukl Date: Tue, 28 Apr 2009 00:15:53 +0200 Subject: added thinking_sphinx plugin for fulltext search on nodes and heads --- .../lib/thinking_sphinx/facet_collection.rb | 60 ++++++++++++++++++++++ 1 file changed, 60 insertions(+) create mode 100644 vendor/plugins/thinking-sphinx/lib/thinking_sphinx/facet_collection.rb (limited to 'vendor/plugins/thinking-sphinx/lib/thinking_sphinx/facet_collection.rb') diff --git a/vendor/plugins/thinking-sphinx/lib/thinking_sphinx/facet_collection.rb b/vendor/plugins/thinking-sphinx/lib/thinking_sphinx/facet_collection.rb new file mode 100644 index 00000000..1ad9d1a8 --- /dev/null +++ b/vendor/plugins/thinking-sphinx/lib/thinking_sphinx/facet_collection.rb @@ -0,0 +1,60 @@ +module ThinkingSphinx + class FacetCollection < Hash + attr_accessor :arguments + + def initialize(arguments) + @arguments = arguments.clone + @attribute_values = {} + @facets = [] + end + + def add_from_results(facet, results) + facet = facet_from_object(results.first, facet) if facet.is_a?(String) + + self[facet.name] ||= {} + @attribute_values[facet.name] ||= {} + @facets << facet + + results.each_with_groupby_and_count { |result, group, count| + facet_value = facet.value(result, group) + + self[facet.name][facet_value] ||= 0 + self[facet.name][facet_value] += count + @attribute_values[facet.name][facet_value] = group + } + end + + def for(hash = {}) + arguments = @arguments.clone + options = arguments.extract_options! + options[:with] ||= {} + + hash.each do |key, value| + attrib = facet_for_key(key).attribute_name + options[:with][attrib] = underlying_value key, value + end + + arguments << options + ThinkingSphinx::Search.search *arguments + end + + private + + def underlying_value(key, value) + case value + when Array + value.collect { |item| underlying_value(key, item) } + else + @attribute_values[key][value] + end + end + + def facet_for_key(key) + @facets.detect { |facet| facet.name == key } + end + + def facet_from_object(object, name) + object.sphinx_facets.detect { |facet| facet.attribute_name == name } + end + end +end \ No newline at end of file -- cgit v1.3