Commit 6ff0271273650a90deaabb452d130c34dcbd5f8b

Authored by Rodrigo Souto
1 parent c893df1c

Moving acts as searchable to the plugin

lib/acts_as_searchable.rb
... ... @@ -1,87 +0,0 @@
1   -module ActsAsSearchable
2   -
3   - module ClassMethods
4   - ACTS_AS_SEARCHABLE_ENABLED = true unless defined? ACTS_AS_SEARCHABLE_ENABLED
5   -
6   - def acts_as_searchable(options = {})
7   - return if !ACTS_AS_SEARCHABLE_ENABLED
8   -
9   - if options[:fields]
10   - options[:fields] << {:schema_name => :string}
11   - else
12   - options[:additional_fields] ||= []
13   - options[:additional_fields] << {:schema_name => :string}
14   - end
15   -
16   - acts_as_solr options
17   - extend FindByContents
18   - send :include, InstanceMethods
19   - end
20   -
21   - module InstanceMethods
22   - def schema_name
23   - self.class.schema_name
24   - end
25   -
26   - # replace solr_id from vendor/plugins/acts_as_solr_reloaded/lib/acts_as_solr/instance_methods.rb
27   - # to include schema_name
28   - def solr_id
29   - id = "#{self.class.name}:#{record_id(self)}"
30   - id.insert(0, "#{schema_name}:") unless schema_name.blank?
31   - id
32   - end
33   - end
34   -
35   - module FindByContents
36   -
37   - def schema_name
38   - (Noosfero::MultiTenancy.on? and ActiveRecord::Base.postgresql?) ? ActiveRecord::Base.connection.schema_search_path : ''
39   - end
40   -
41   - def find_by_contents(query, pg_options = {}, options = {}, db_options = {})
42   - pg_options[:page] ||= 1
43   - pg_options[:per_page] ||= 20
44   - options[:page] = pg_options[:page].to_i
45   - options[:per_page] = pg_options[:per_page].to_i
46   - options[:scores] ||= true
47   - options[:filter_queries] ||= []
48   - options[:filter_queries] << "schema_name:\"#{schema_name}\"" unless schema_name.blank?
49   - all_facets_enabled = options.delete(:all_facets)
50   - options[:per_page] = options.delete(:extra_limit) if options[:extra_limit]
51   - results = []
52   - facets = all_facets = {}
53   -
54   - solr_result = find_by_solr(query, options)
55   - if all_facets_enabled
56   - options[:facets][:browse] = nil
57   - all_facets = find_by_solr(query, options.merge(:per_page => 0)).facets
58   - end
59   -
60   - if !solr_result.nil?
61   - facets = options.include?(:facets) ? solr_result.facets : []
62   -
63   - if db_options.empty?
64   - results = solr_result
65   - else
66   - ids = solr_result.results.map{ |r| r[:id].to_i }
67   - if ids.empty?
68   - ids << -1
69   - end
70   -
71   - if db_options[:conditions]
72   - db_options[:conditions] = sanitize_sql_for_conditions(db_options[:conditions]) + " and #{table_name}.id in (#{ids.join(', ')})"
73   - else
74   - db_options[:conditions] = "#{table_name}.id in (#{ids.join(', ')})"
75   - end
76   -
77   - results = find(:all, db_options)
78   - end
79   - end
80   -
81   - {:results => results, :facets => facets, :all_facets => all_facets}
82   - end
83   - end
84   - end
85   -end
86   -
87   -ActiveRecord::Base.send(:extend, ActsAsSearchable::ClassMethods)
plugins/solr/dependencies.rb
1 1 require 'rubygems'
2 2 require 'active_record'
3   -require 'acts_as_searchable'
  3 +require "#{File.dirname(__FILE__)}/lib/acts_as_searchable"
4 4 require "#{File.dirname(__FILE__)}/lib/acts_as_faceted"
... ...
plugins/solr/test/unit/acts_as_searchable_test.rb 0 → 100644
... ... @@ -0,0 +1,46 @@
  1 +require File.dirname(__FILE__) + '/../test_helper'
  2 +require "#{File.dirname(__FILE__)}../../lib/acts_as_searchable"
  3 +
  4 +class ActsAsSearchableTest < ActiveSupport::TestCase
  5 +
  6 + def setup
  7 + @test_model = Class.new ActiveRecord::Base
  8 + end
  9 +
  10 + def silent
  11 + # http://mentalized.net/journal/2010/04/02/suppress_warnings_from_ruby/
  12 + original_verbosity = $VERBOSE
  13 + $VERBOSE = nil
  14 + result = yield
  15 + $VERBOSE = original_verbosity
  16 + return result
  17 + end
  18 +
  19 + should 'be enabled by default' do
  20 + assert ActsAsSearchable::ClassMethods::ACTS_AS_SEARCHABLE_ENABLED, true
  21 + end
  22 +
  23 + should 'not be searchable when disabled' do
  24 + # suppress warning about already initialized constant
  25 + silent { ActsAsSearchable::ClassMethods::ACTS_AS_SEARCHABLE_ENABLED = false }
  26 +
  27 + @test_model.expects(:acts_as_solr).never
  28 + @test_model.acts_as_searchable
  29 + end
  30 +
  31 + should 'correctly pass options to search engine' do
  32 + options = {:fields => [{:name => :text}]}
  33 + @test_model.expects(:acts_as_solr).with(options)
  34 + @test_model.acts_as_searchable options
  35 + end
  36 +
  37 + should 'always include schema name as a field' do
  38 + @test_model.expects(:acts_as_solr).with(has_entry(:fields, [{:field1 => :text}, {:schema_name => :string}]))
  39 + @test_model.acts_as_searchable :fields => [{:field1 => :text}]
  40 + # ...even with no fields
  41 + @test_model = Class.new ActiveRecord::Base
  42 + @test_model.expects(:acts_as_solr).with(has_entry(:additional_fields, [{:schema_name => :string}]))
  43 + @test_model.acts_as_searchable
  44 + end
  45 +
  46 +end
... ...
test/unit/acts_as_searchable_test.rb
... ... @@ -1,46 +0,0 @@
1   -require File.dirname(__FILE__) + '/../test_helper'
2   -require 'acts_as_searchable'
3   -
4   -class ActsAsSearchableTest < ActiveSupport::TestCase
5   -
6   - def setup
7   - @test_model = Class.new ActiveRecord::Base
8   - end
9   -
10   - def silent
11   - # http://mentalized.net/journal/2010/04/02/suppress_warnings_from_ruby/
12   - original_verbosity = $VERBOSE
13   - $VERBOSE = nil
14   - result = yield
15   - $VERBOSE = original_verbosity
16   - return result
17   - end
18   -
19   - should 'be enabled by default' do
20   - assert ActsAsSearchable::ClassMethods::ACTS_AS_SEARCHABLE_ENABLED, true
21   - end
22   -
23   - should 'not be searchable when disabled' do
24   - # suppress warning about already initialized constant
25   - silent { ActsAsSearchable::ClassMethods::ACTS_AS_SEARCHABLE_ENABLED = false }
26   -
27   - @test_model.expects(:acts_as_solr).never
28   - @test_model.acts_as_searchable
29   - end
30   -
31   - should 'correctly pass options to search engine' do
32   - options = {:fields => [{:name => :text}]}
33   - @test_model.expects(:acts_as_solr).with(options)
34   - @test_model.acts_as_searchable options
35   - end
36   -
37   - should 'always include schema name as a field' do
38   - @test_model.expects(:acts_as_solr).with(has_entry(:fields, [{:field1 => :text}, {:schema_name => :string}]))
39   - @test_model.acts_as_searchable :fields => [{:field1 => :text}]
40   - # ...even with no fields
41   - @test_model = Class.new ActiveRecord::Base
42   - @test_model.expects(:acts_as_solr).with(has_entry(:additional_fields, [{:schema_name => :string}]))
43   - @test_model.acts_as_searchable
44   - end
45   -
46   -end