OSDN Git Service

Move files search to gitlab_git
[wvm/gitlab.git] / app / contexts / search_context.rb
1 class SearchContext
2   attr_accessor :project_ids, :params
3
4   def initialize(project_ids, params)
5     @project_ids, @params = project_ids, params.dup
6   end
7
8   def execute
9     query = params[:search]
10
11     return result unless query.present?
12
13     projects = Project.where(id: project_ids)
14     result[:projects] = projects.search(query).limit(10)
15
16     # Search inside singe project
17     result[:project] = project = projects.first if projects.length == 1
18
19     if params[:search_code].present?
20       result[:blobs] = project.repository.search_files(query, params[:repository_ref]) unless project.empty_repo?
21     else
22       result[:merge_requests] = MergeRequest.where(project_id: project_ids).search(query).limit(10)
23       result[:issues] = Issue.where(project_id: project_ids).search(query).limit(10)
24       result[:wiki_pages] = []
25     end
26     result
27   end
28
29   def result
30     @result ||= {
31       projects: [],
32       merge_requests: [],
33       issues: [],
34       wiki_pages: [],
35       blobs: []
36     }
37   end
38 end