OSDN Git Service

854c369ea4aa4ac210247f66fd0c6d0797fe5e84
[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     if projects.length == 1
16       result[:snippets] = projects.first.files(query, params[:branch_ref])
17     end
18     result[:merge_requests] = MergeRequest.where(project_id: project_ids).search(query).limit(10)
19     result[:issues] = Issue.where(project_id: project_ids).search(query).limit(10)
20     result[:wiki_pages] = []
21     result
22   end
23
24   def result
25     @result ||= {
26       projects: [],
27       merge_requests: [],
28       issues: [],
29       wiki_pages: [],
30       snippets: []
31     }
32   end
33 end
34