Commit 56f7c497e0f6e0739e7e676e8fbf6d6481bcdb6c
1 parent
b1f54f79
Exists in
master
and in
28 other branches
[pluginize-solr] Moving extra_data_for_index to plugin
Showing
7 changed files
with
44 additions
and
47 deletions
Show diff stats
app/models/enterprise.rb
@@ -14,7 +14,6 @@ class Enterprise < Organization | @@ -14,7 +14,6 @@ class Enterprise < Organization | ||
14 | 14 | ||
15 | has_and_belongs_to_many :fans, :class_name => 'Person', :join_table => 'favorite_enteprises_people' | 15 | has_and_belongs_to_many :fans, :class_name => 'Person', :join_table => 'favorite_enteprises_people' |
16 | 16 | ||
17 | - extra_data_for_index :product_categories | ||
18 | def product_categories | 17 | def product_categories |
19 | products.includes(:product_category).map{|p| p.category_full_name}.compact | 18 | products.includes(:product_category).map{|p| p.category_full_name}.compact |
20 | end | 19 | end |
app/models/profile.rb
@@ -127,18 +127,6 @@ class Profile < ActiveRecord::Base | @@ -127,18 +127,6 @@ class Profile < ActiveRecord::Base | ||
127 | scrap.nil? ? Scrap.all_scraps(self) : Scrap.all_scraps(self).find(scrap) | 127 | scrap.nil? ? Scrap.all_scraps(self) : Scrap.all_scraps(self).find(scrap) |
128 | end | 128 | end |
129 | 129 | ||
130 | - class_inheritable_accessor :extra_index_methods | ||
131 | - self.extra_index_methods = [] | ||
132 | - | ||
133 | - def extra_data_for_index | ||
134 | - self.class.extra_index_methods.map { |meth| meth.to_proc.call(self) }.flatten | ||
135 | - end | ||
136 | - | ||
137 | - def self.extra_data_for_index(sym = nil, &block) | ||
138 | - self.extra_index_methods.push(sym) if sym | ||
139 | - self.extra_index_methods.push(block) if block_given? | ||
140 | - end | ||
141 | - | ||
142 | acts_as_having_settings :field => :data | 130 | acts_as_having_settings :field => :data |
143 | 131 | ||
144 | settings_items :redirect_l10n, :type => :boolean, :default => false | 132 | settings_items :redirect_l10n, :type => :boolean, :default => false |
plugins/solr/lib/ext/enterprise.rb
@@ -2,4 +2,5 @@ require_dependency 'enterprise' | @@ -2,4 +2,5 @@ require_dependency 'enterprise' | ||
2 | 2 | ||
3 | class Enterprise | 3 | class Enterprise |
4 | after_save_reindex [:products], :with => :delayed_job | 4 | after_save_reindex [:products], :with => :delayed_job |
5 | + solr_plugin_extra_data_for_index :product_categories | ||
5 | end | 6 | end |
plugins/solr/lib/ext/profile.rb
@@ -12,7 +12,7 @@ class Profile | @@ -12,7 +12,7 @@ class Profile | ||
12 | }, :category_query => proc { |c| "solr_plugin_category_filter:#{c.id}" }, | 12 | }, :category_query => proc { |c| "solr_plugin_category_filter:#{c.id}" }, |
13 | :order => [:solr_plugin_f_region, :solr_plugin_f_categories, :solr_plugin_f_enabled] | 13 | :order => [:solr_plugin_f_region, :solr_plugin_f_categories, :solr_plugin_f_enabled] |
14 | 14 | ||
15 | - acts_as_searchable :fields => facets_fields_for_solr + [:extra_data_for_index, | 15 | + acts_as_searchable :fields => facets_fields_for_solr + [:solr_plugin_extra_data_for_index, |
16 | # searched fields | 16 | # searched fields |
17 | {:name => {:type => :text, :boost => 2.0}}, | 17 | {:name => {:type => :text, :boost => 2.0}}, |
18 | {:identifier => :text}, {:nickname => :text}, | 18 | {:identifier => :text}, {:nickname => :text}, |
@@ -31,6 +31,18 @@ class Profile | @@ -31,6 +31,18 @@ class Profile | ||
31 | ], :facets => facets_option_for_solr, | 31 | ], :facets => facets_option_for_solr, |
32 | :boost => proc{ |p| 10 if p.enabled } | 32 | :boost => proc{ |p| 10 if p.enabled } |
33 | 33 | ||
34 | + class_inheritable_accessor :solr_plugin_extra_index_methods | ||
35 | + self.solr_plugin_extra_index_methods = [] | ||
36 | + | ||
37 | + def solr_plugin_extra_data_for_index | ||
38 | + self.class.solr_plugin_extra_index_methods.map { |meth| meth.to_proc.call(self) }.flatten | ||
39 | + end | ||
40 | + | ||
41 | + def self.solr_plugin_extra_data_for_index(sym = nil, &block) | ||
42 | + self.solr_plugin_extra_index_methods.push(sym) if sym | ||
43 | + self.solr_plugin_extra_index_methods.push(block) if block_given? | ||
44 | + end | ||
45 | + | ||
34 | private | 46 | private |
35 | 47 | ||
36 | def self.solr_plugin_f_categories_label_proc(environment) | 48 | def self.solr_plugin_f_categories_label_proc(environment) |
plugins/solr/test/unit/profile_test.rb
@@ -55,4 +55,34 @@ class ProfileTest < ActiveSupport::TestCase | @@ -55,4 +55,34 @@ class ProfileTest < ActiveSupport::TestCase | ||
55 | in_name = create(Person, :name => 'bananas in the name!', :user_id => fast_create(User).id) | 55 | in_name = create(Person, :name => 'bananas in the name!', :user_id => fast_create(User).id) |
56 | assert_equal [in_name], Person.find_by_contents('bananas')[:results].docs | 56 | assert_equal [in_name], Person.find_by_contents('bananas')[:results].docs |
57 | end | 57 | end |
58 | + | ||
59 | + should 'be able to add extra data for index' do | ||
60 | + klass = Class.new(Profile) | ||
61 | + klass.any_instance.expects(:random_method) | ||
62 | + klass.solr_plugin_extra_data_for_index :random_method | ||
63 | + | ||
64 | + klass.new.solr_plugin_extra_data_for_index | ||
65 | + end | ||
66 | + | ||
67 | + should 'be able to add a block as extra data for index' do | ||
68 | + klass = Class.new(Profile) | ||
69 | + result = Object.new | ||
70 | + klass.solr_plugin_extra_data_for_index do |obj| | ||
71 | + result | ||
72 | + end | ||
73 | + | ||
74 | + assert_includes klass.new.solr_plugin_extra_data_for_index, result | ||
75 | + end | ||
76 | + | ||
77 | + should 'actually index by results of solr_plugin_extra_data_for_index' do | ||
78 | + TestSolr.enable | ||
79 | + class ExtraDataForIndex < Profile | ||
80 | + solr_plugin_extra_data_for_index do |obj| | ||
81 | + 'sample indexed text' | ||
82 | + end | ||
83 | + end | ||
84 | + profile = ExtraDataForIndex.create!(:name => 'testprofile', :identifier => 'testprofile') | ||
85 | + | ||
86 | + assert_includes ExtraDataForIndex.find_by_contents('sample')[:results], profile | ||
87 | + end | ||
58 | end | 88 | end |
test/mocks/test/testing_extra_data_for_index.rb
test/unit/profile_test.rb
@@ -498,34 +498,6 @@ class ProfileTest < ActiveSupport::TestCase | @@ -498,34 +498,6 @@ class ProfileTest < ActiveSupport::TestCase | ||
498 | assert p.display_info_to?(admin) | 498 | assert p.display_info_to?(admin) |
499 | end | 499 | end |
500 | 500 | ||
501 | - should 'be able to add extra data for index' do | ||
502 | - klass = Class.new(Profile) | ||
503 | - klass.any_instance.expects(:random_method) | ||
504 | - klass.extra_data_for_index :random_method | ||
505 | - | ||
506 | - klass.new.extra_data_for_index | ||
507 | - end | ||
508 | - | ||
509 | - should 'be able to add a block as extra data for index' do | ||
510 | - klass = Class.new(Profile) | ||
511 | - result = Object.new | ||
512 | - klass.extra_data_for_index do |obj| | ||
513 | - result | ||
514 | - end | ||
515 | - | ||
516 | - assert_includes klass.new.extra_data_for_index, result | ||
517 | - end | ||
518 | - | ||
519 | - # TestingExtraDataForIndex is a subclass of profile that adds a block as | ||
520 | - # content to be added to the index. The block returns "sample indexed text" | ||
521 | - # see test/mocks/test/testing_extra_data_for_index.rb | ||
522 | - should 'actually index by results of extra_data_for_index' do | ||
523 | - TestSolr.enable | ||
524 | - profile = TestingExtraDataForIndex.create!(:name => 'testprofile', :identifier => 'testprofile') | ||
525 | - | ||
526 | - assert_includes TestingExtraDataForIndex.find_by_contents('sample')[:results], profile | ||
527 | - end | ||
528 | - | ||
529 | should 'index profile identifier for searching' do | 501 | should 'index profile identifier for searching' do |
530 | TestSolr.enable | 502 | TestSolr.enable |
531 | Profile.destroy_all | 503 | Profile.destroy_all |