Commit 3ebea73abd24c00e218f1144c7288ea707f4c76c
1 parent
b374f2c5
Exists in
master
and in
22 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 | 33 | def load_region_and_search |
| 34 | 34 | @region = environment.regions.find(params[:id]) |
| 35 | 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 | 37 | end |
| 38 | 38 | end |
| 39 | 39 | ... | ... |
app/controllers/admin/users_controller.rb
| ... | ... | @@ -18,7 +18,7 @@ class UsersController < AdminController |
| 18 | 18 | end |
| 19 | 19 | scope = scope.order('name ASC') |
| 20 | 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 | 22 | end |
| 23 | 23 | |
| 24 | 24 | def set_admin_role | ... | ... |
app/controllers/application_controller.rb
| ... | ... | @@ -164,11 +164,15 @@ class ApplicationController < ActionController::Base |
| 164 | 164 | end |
| 165 | 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 | 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 | 177 | end |
| 174 | 178 | end | ... | ... |
app/controllers/my_profile/cms_controller.rb
| ... | ... | @@ -306,7 +306,7 @@ class CmsController < MyProfileController |
| 306 | 306 | |
| 307 | 307 | def search |
| 308 | 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 | 310 | render :text => article_list_to_json(results), :content_type => 'application/json' |
| 311 | 311 | end |
| 312 | 312 | ... | ... |
app/controllers/public/profile_search_controller.rb
| ... | ... | @@ -11,7 +11,7 @@ class ProfileSearchController < PublicController |
| 11 | 11 | if params[:where] == 'environment' |
| 12 | 12 | redirect_to :controller => 'search', :query => @q |
| 13 | 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 | 15 | end |
| 16 | 16 | end |
| 17 | 17 | end | ... | ... |
app/controllers/public/search_controller.rb
| ... | ... | @@ -217,7 +217,7 @@ class SearchController < PublicController |
| 217 | 217 | end |
| 218 | 218 | |
| 219 | 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 | 221 | end |
| 222 | 222 | |
| 223 | 223 | private | ... | ... |
| ... | ... | @@ -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 | 565 | assert_no_tag :tag => 'meta', :attributes => { :property => 'article:published_time' } |
| 566 | 566 | assert_no_tag :tag => 'meta', :attributes => { :property => 'og:image' } |
| 567 | 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 | 578 | end | ... | ... |