blob: 02592796ddcfb652353f58e446c55c5c6c8a1d6e (
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
|
class MoveToProjectFinder
PAGE_SIZE = 50
def initialize(user)
@user = user
end
def execute(from_project, search: nil, offset_id: nil)
projects = @user.authorized_projects
projects = projects.search(search) if search.present?
projects = skip_projects_before(projects, offset_id.to_i) if offset_id.present?
ProjectTeam.preload_max_member_access(projects.map(&:team))
projects = take_projects(projects)
projects.delete(from_project)
projects
end
private
def skip_projects_before(projects, offset_project_id)
index = projects.index { |project| project.id == offset_project_id }
index ? projects.drop(index + 1) : projects
end
def take_projects(projects)
projects.lazy.select do |project|
@user.can?(:admin_issue, project)
end.take(PAGE_SIZE).to_a
end
end
|