diff options
Diffstat (limited to 'app/finders/concerns/packages/finder_helper.rb')
-rw-r--r-- | app/finders/concerns/packages/finder_helper.rb | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/app/finders/concerns/packages/finder_helper.rb b/app/finders/concerns/packages/finder_helper.rb index 524e7aa7ff9..30bc0ff7909 100644 --- a/app/finders/concerns/packages/finder_helper.rb +++ b/app/finders/concerns/packages/finder_helper.rb @@ -4,6 +4,9 @@ module Packages module FinderHelper extend ActiveSupport::Concern + InvalidPackageTypeError = Class.new(StandardError) + InvalidStatusError = Class.new(StandardError) + private def packages_visible_to_user(user, within_group:) @@ -25,5 +28,35 @@ module Packages ::Project.in_namespace(namespace_ids) .public_or_visible_to_user(user, ::Gitlab::Access::REPORTER) end + + def package_type + params[:package_type].presence + end + + def filter_by_package_type(packages) + return packages unless package_type + raise InvalidPackageTypeError unless ::Packages::Package.package_types.key?(package_type) + + packages.with_package_type(package_type) + end + + def filter_by_package_name(packages) + return packages unless params[:package_name].present? + + packages.search_by_name(params[:package_name]) + end + + def filter_with_version(packages) + return packages if params[:include_versionless].present? + + packages.has_version + end + + def filter_by_status(packages) + return packages.displayable unless params[:status].present? + raise InvalidStatusError unless Package.statuses.key?(params[:status]) + + packages.with_status(params[:status]) + end end end |