Commit 3ebea73abd24c00e218f1144c7288ea707f4c76c
1 parent
b374f2c5
Exists in
master
and in
29 other branches
[search-improvements] Register search_term_occurrence on find_by_contents
Showing
8 changed files
with
40 additions
and
9 deletions
Show diff stats
app/controllers/admin/region_validators_controller.rb
@@ -33,7 +33,7 @@ class RegionValidatorsController < AdminController | @@ -33,7 +33,7 @@ class RegionValidatorsController < AdminController | ||
33 | def load_region_and_search | 33 | def load_region_and_search |
34 | @region = environment.regions.find(params[:id]) | 34 | @region = environment.regions.find(params[:id]) |
35 | if params[:search] | 35 | if params[:search] |
36 | - @search = find_by_contents(:organizations, Organization, params[:search])[:results].reject {|item| @region.validator_ids.include?(item.id) } | 36 | + @search = find_by_contents(:organizations, environment, Organization, params[:search])[:results].reject {|item| @region.validator_ids.include?(item.id) } |
37 | end | 37 | end |
38 | end | 38 | end |
39 | 39 |
app/controllers/admin/users_controller.rb
@@ -18,7 +18,7 @@ class UsersController < AdminController | @@ -18,7 +18,7 @@ class UsersController < AdminController | ||
18 | end | 18 | end |
19 | scope = scope.order('name ASC') | 19 | scope = scope.order('name ASC') |
20 | @q = params[:q] | 20 | @q = params[:q] |
21 | - @collection = find_by_contents(:people, scope, @q, {:per_page => per_page, :page => params[:npage]})[:results] | 21 | + @collection = find_by_contents(:people, environment, scope, @q, {:per_page => per_page, :page => params[:npage]})[:results] |
22 | end | 22 | end |
23 | 23 | ||
24 | def set_admin_role | 24 | def set_admin_role |
app/controllers/application_controller.rb
@@ -164,11 +164,15 @@ class ApplicationController < ActionController::Base | @@ -164,11 +164,15 @@ class ApplicationController < ActionController::Base | ||
164 | end | 164 | end |
165 | end | 165 | end |
166 | 166 | ||
167 | - def find_by_contents(asset, scope, query, paginate_options={:page => 1}, options={}) | ||
168 | - plugins.dispatch_first(:find_by_contents, asset, scope, query, paginate_options, options) | 167 | + include SearchTermHelper |
168 | + | ||
169 | + def find_by_contents(asset, context, scope, query, paginate_options={:page => 1}, options={}) | ||
170 | + search = plugins.dispatch_first(:find_by_contents, asset, scope, query, paginate_options, options) | ||
171 | + register_search_term(query, scope.count, search[:results].count, context, asset) | ||
172 | + search | ||
169 | end | 173 | end |
170 | 174 | ||
171 | - def find_suggestions(asset, query, options={}) | ||
172 | - plugins.dispatch_first(:find_suggestions, asset, query, options) | 175 | + def find_suggestions(query, context, asset, options={}) |
176 | + plugins.dispatch_first(:find_suggestions, query, context, asset, options) | ||
173 | end | 177 | end |
174 | end | 178 | end |
app/controllers/my_profile/cms_controller.rb
@@ -306,7 +306,7 @@ class CmsController < MyProfileController | @@ -306,7 +306,7 @@ class CmsController < MyProfileController | ||
306 | 306 | ||
307 | def search | 307 | def search |
308 | query = params[:q] | 308 | query = params[:q] |
309 | - results = find_by_contents(:uploaded_files, profile.files.published, query)[:results] | 309 | + results = find_by_contents(:uploaded_files, profile, profile.files.published, query)[:results] |
310 | render :text => article_list_to_json(results), :content_type => 'application/json' | 310 | render :text => article_list_to_json(results), :content_type => 'application/json' |
311 | end | 311 | end |
312 | 312 |
app/controllers/public/profile_search_controller.rb
@@ -11,7 +11,7 @@ class ProfileSearchController < PublicController | @@ -11,7 +11,7 @@ class ProfileSearchController < PublicController | ||
11 | if params[:where] == 'environment' | 11 | if params[:where] == 'environment' |
12 | redirect_to :controller => 'search', :query => @q | 12 | redirect_to :controller => 'search', :query => @q |
13 | else | 13 | else |
14 | - @results = find_by_contents(:articles, profile.articles.published, @q, {:per_page => 10, :page => params[:page]})[:results] | 14 | + @results = find_by_contents(:articles, profile, profile.articles.published, @q, {:per_page => 10, :page => params[:page]})[:results] |
15 | end | 15 | end |
16 | end | 16 | end |
17 | end | 17 | end |
app/controllers/public/search_controller.rb
@@ -217,7 +217,7 @@ class SearchController < PublicController | @@ -217,7 +217,7 @@ class SearchController < PublicController | ||
217 | end | 217 | end |
218 | 218 | ||
219 | def full_text_search | 219 | def full_text_search |
220 | - @searches[@asset] = find_by_contents(@asset, @scope, @query, paginate_options, {:category => @category, :filter => @filter}) | 220 | + @searches[@asset] = find_by_contents(@asset, environment, @scope, @query, paginate_options, {:category => @category, :filter => @filter}) |
221 | end | 221 | end |
222 | 222 | ||
223 | private | 223 | private |
@@ -0,0 +1,17 @@ | @@ -0,0 +1,17 @@ | ||
1 | +module SearchTermHelper | ||
2 | + def register_search_term(term, total, indexed, context, asset='all') | ||
3 | + normalized_term = normalize_term(term) | ||
4 | + if normalized_term.present? | ||
5 | + search_term = SearchTerm.find_or_create(normalized_term, context, asset) | ||
6 | + SearchTermOccurrence.create!(:search_term => search_term, :total => total, :indexed => indexed) | ||
7 | + end | ||
8 | + end | ||
9 | + | ||
10 | + #FIXME For some reason the job is created but nothing is ran. | ||
11 | + #handle_asynchronously :register_search_term | ||
12 | + | ||
13 | + #TODO Think better on how to normalize them properly | ||
14 | + def normalize_term(search_term) | ||
15 | + search_term | ||
16 | + end | ||
17 | +end |
test/functional/application_controller_test.rb
@@ -565,4 +565,14 @@ class ApplicationControllerTest < ActionController::TestCase | @@ -565,4 +565,14 @@ class ApplicationControllerTest < ActionController::TestCase | ||
565 | assert_no_tag :tag => 'meta', :attributes => { :property => 'article:published_time' } | 565 | assert_no_tag :tag => 'meta', :attributes => { :property => 'article:published_time' } |
566 | assert_no_tag :tag => 'meta', :attributes => { :property => 'og:image' } | 566 | assert_no_tag :tag => 'meta', :attributes => { :property => 'og:image' } |
567 | end | 567 | end |
568 | + | ||
569 | + should 'register search_term occurrence on find_by_contents' do | ||
570 | + controller = ApplicationController.new | ||
571 | + controller.stubs(:environment).returns(Environment.default) | ||
572 | + assert_difference 'SearchTermOccurrence.count', 1 do | ||
573 | + controller.send(:find_by_contents, :people, Environment.default, Person, 'search_term', paginate_options={:page => 1}, options={}) | ||
574 | + process_delayed_job_queue | ||
575 | + end | ||
576 | + end | ||
577 | + | ||
568 | end | 578 | end |