OSDN Git Service

Search for blobs by default inside project. Added pagination for blobs search
[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     project = projects.first if projects.length == 1
18
19     if params[:search_code].present?
20       blobs = []
21
22       unless project.empty_repo?
23         blobs = project.repository.search_files(query, params[:repository_ref])
24         blobs = Kaminari.paginate_array(blobs).page(params[:page]).per(20)
25       end
26
27       result[:blobs] = blobs
28     else
29       result[:merge_requests] = MergeRequest.where(project_id: project_ids).search(query).limit(10)
30       result[:issues] = Issue.where(project_id: project_ids).search(query).limit(10)
31       result[:wiki_pages] = []
32     end
33     result
34   end
35
36   def result
37     @result ||= {
38       projects: [],
39       merge_requests: [],
40       issues: [],
41       wiki_pages: [],
42       blobs: []
43     }
44   end
45 end