blob: a6d98015e9dde93c3b54c6acad8f77b06a0a7741 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
|
# frozen_string_literal: true
# Namespaces::ProjectsFinder
#
# Used to filter Projects by set of params
#
# Arguments:
# current_user
# namespace
# params:
# sort: string
# search: string
# include_subgroups: boolean
# ids: int[]
#
module Namespaces
class ProjectsFinder
def initialize(namespace: nil, current_user: nil, params: {})
@namespace = namespace
@current_user = current_user
@params = params
end
def execute
return Project.none if namespace.nil?
collection = if params[:include_subgroups].present?
namespace.all_projects.with_route
else
namespace.projects.with_route
end
filter_projects(collection)
end
private
attr_reader :namespace, :params, :current_user
def filter_projects(collection)
collection = by_ids(collection)
collection = by_similarity(collection)
collection
end
def by_ids(items)
return items unless params[:ids].present?
items.id_in(params[:ids])
end
def by_similarity(items)
return items unless params[:search].present?
if params[:sort] == :similarity
items = items.sorted_by_similarity_desc(params[:search], include_in_select: true)
end
items.merge(Project.search(params[:search]))
end
end
end
Namespaces::ProjectsFinder.prepend_if_ee('::EE::Namespaces::ProjectsFinder')
|