summaryrefslogtreecommitdiff
path: root/app/finders/fork_targets_finder.rb
blob: e129fde37481601f39c26e137f71e85e736d9cd7 (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
# frozen_string_literal: true

class ForkTargetsFinder
  def initialize(project, user)
    @project = project
    @user = user
  end

  def execute(options = {})
    return previous_execute(options) unless Feature.enabled?(:searchable_fork_targets)

    items = fork_targets(options)

    by_search(items, options)
  end

  private

  attr_reader :project, :user

  def by_search(items, options)
    return items if options[:search].blank?

    items.search(options[:search])
  end

  def fork_targets(options)
    if options[:only_groups]
      user.manageable_groups(include_groups_with_developer_maintainer_access: true)
    else
      user.forkable_namespaces.sort_by_type
    end
  end

  # rubocop: disable CodeReuse/ActiveRecord
  def previous_execute(options = {})
    return ::Namespace.where(id: user.forkable_namespaces).sort_by_type unless options[:only_groups]

    ::Group.where(id: user.manageable_groups(include_groups_with_developer_maintainer_access: true))
  end
  # rubocop: enable CodeReuse/ActiveRecord
end

ForkTargetsFinder.prepend_mod_with('ForkTargetsFinder')