63 lines
1.5 KiB
Ruby
63 lines
1.5 KiB
Ruby
|
# frozen_string_literal: true
|
||
|
module Packages
|
||
|
module Maven
|
||
|
class PackageFinder
|
||
|
attr_reader :path, :current_user, :project, :group
|
||
|
|
||
|
def initialize(path, current_user, project: nil, group: nil)
|
||
|
@path = path
|
||
|
@current_user = current_user
|
||
|
@project = project
|
||
|
@group = group
|
||
|
end
|
||
|
|
||
|
def execute
|
||
|
packages_with_path.last
|
||
|
end
|
||
|
|
||
|
def execute!
|
||
|
packages_with_path.last!
|
||
|
end
|
||
|
|
||
|
private
|
||
|
|
||
|
def base
|
||
|
if project
|
||
|
packages_for_a_single_project
|
||
|
elsif group
|
||
|
packages_for_multiple_projects
|
||
|
else
|
||
|
packages
|
||
|
end
|
||
|
end
|
||
|
|
||
|
def packages_with_path
|
||
|
base.only_maven_packages_with_path(path)
|
||
|
end
|
||
|
|
||
|
# Produces a query that returns all packages.
|
||
|
def packages
|
||
|
::Packages::Package.all
|
||
|
end
|
||
|
|
||
|
# Produces a query that retrieves packages from a single project.
|
||
|
def packages_for_a_single_project
|
||
|
project.packages
|
||
|
end
|
||
|
|
||
|
# Produces a query that retrieves packages from multiple projects that
|
||
|
# the current user can view within a group.
|
||
|
def packages_for_multiple_projects
|
||
|
::Packages::Package.for_projects(projects_visible_to_current_user)
|
||
|
end
|
||
|
|
||
|
# Returns the projects that the current user can view within a group.
|
||
|
def projects_visible_to_current_user
|
||
|
::Project
|
||
|
.in_namespace(group.self_and_descendants.select(:id))
|
||
|
.public_or_visible_to_user(current_user)
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
end
|