Commit 0f87ae3be5d7d1bc0a3728f43ae0465005b68b92
1 parent
cddec75d
Exists in
master
and in
4 other branches
Allow searching by namespace name, include public projects
GITLAB-1457 (GITLAB-836) Change-Id: If8e2474bc6908accca51f395f58937687f101b58
Showing
3 changed files
with
34 additions
and
5 deletions
Show diff stats
app/contexts/search_context.rb
@@ -9,11 +9,14 @@ class SearchContext | @@ -9,11 +9,14 @@ class SearchContext | ||
9 | query = params[:search] | 9 | query = params[:search] |
10 | 10 | ||
11 | return result unless query.present? | 11 | return result unless query.present? |
12 | - | ||
13 | - projects = Project.where(id: project_ids) | ||
14 | - result[:projects] = projects.search(query).limit(20) | 12 | + result[:projects] = Project.where("projects.id in (?) OR projects.public = true", project_ids).search(query).limit(20) |
15 | 13 | ||
16 | # Search inside single project | 14 | # Search inside single project |
15 | + single_project_search(Project.where(id: project_ids), query) | ||
16 | + result | ||
17 | + end | ||
18 | + | ||
19 | + def single_project_search(projects, query) | ||
17 | project = projects.first if projects.length == 1 | 20 | project = projects.first if projects.length == 1 |
18 | 21 | ||
19 | if params[:search_code].present? | 22 | if params[:search_code].present? |
@@ -23,7 +26,6 @@ class SearchContext | @@ -23,7 +26,6 @@ class SearchContext | ||
23 | result[:issues] = Issue.where(project_id: project_ids).search(query).order('updated_at DESC').limit(20) | 26 | result[:issues] = Issue.where(project_id: project_ids).search(query).order('updated_at DESC').limit(20) |
24 | result[:wiki_pages] = [] | 27 | result[:wiki_pages] = [] |
25 | end | 28 | end |
26 | - result | ||
27 | end | 29 | end |
28 | 30 | ||
29 | def result | 31 | def result |
app/models/project.rb
@@ -122,7 +122,7 @@ class Project < ActiveRecord::Base | @@ -122,7 +122,7 @@ class Project < ActiveRecord::Base | ||
122 | end | 122 | end |
123 | 123 | ||
124 | def search query | 124 | def search query |
125 | - where("projects.name LIKE :query OR projects.path LIKE :query", query: "%#{query}%") | 125 | + joins(:namespace).where("projects.name LIKE :query OR projects.path LIKE :query OR namespaces.name LIKE :query", query: "%#{query}%") |
126 | end | 126 | end |
127 | 127 | ||
128 | def find_with_namespace(id) | 128 | def find_with_namespace(id) |
@@ -0,0 +1,27 @@ | @@ -0,0 +1,27 @@ | ||
1 | +require 'spec_helper' | ||
2 | + | ||
3 | +describe SearchContext do | ||
4 | + let(:found_namespace) { create(:namespace, name: 'searchable namespace', path:'another_thing') } | ||
5 | + let(:user) { create(:user, namespace: found_namespace) } | ||
6 | + let!(:found_project) { create(:project, name: 'searchable_project', creator_id: user.id, namespace: found_namespace, public: false) } | ||
7 | + | ||
8 | + let(:unfound_namespace) { create(:namespace, name: 'unfound namespace', path: 'yet_something_else') } | ||
9 | + let!(:unfound_project) { create(:project, name: 'unfound_project', creator_id: user.id, namespace: unfound_namespace, public: false) } | ||
10 | + let(:public_namespace) { create(:namespace, path: 'something_else',name: 'searchable public namespace') } | ||
11 | + let(:other_user) { create(:user, namespace: public_namespace) } | ||
12 | + let!(:public_project) { create(:project, name: 'searchable_public_project', creator_id: other_user.id, namespace: public_namespace, public: true) } | ||
13 | + | ||
14 | + describe '#execute' do | ||
15 | + it 'public projects should be searchable' do | ||
16 | + context = SearchContext.new([found_project.id], {search_code: false, search: "searchable"}) | ||
17 | + results = context.execute | ||
18 | + results[:projects].should == [found_project, public_project] | ||
19 | + end | ||
20 | + | ||
21 | + it 'namespace name should be searchable' do | ||
22 | + context = SearchContext.new([found_project.id], {search_code: false, search: "searchable namespace"}) | ||
23 | + results = context.execute | ||
24 | + results[:projects].should == [found_project] | ||
25 | + end | ||
26 | + end | ||
27 | +end |