Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'app/services/packages/rubygems/dependency_resolver_service.rb')
-rw-r--r--app/services/packages/rubygems/dependency_resolver_service.rb43
1 files changed, 43 insertions, 0 deletions
diff --git a/app/services/packages/rubygems/dependency_resolver_service.rb b/app/services/packages/rubygems/dependency_resolver_service.rb
new file mode 100644
index 00000000000..c44b26e2b92
--- /dev/null
+++ b/app/services/packages/rubygems/dependency_resolver_service.rb
@@ -0,0 +1,43 @@
+# frozen_string_literal: true
+
+module Packages
+ module Rubygems
+ class DependencyResolverService < BaseService
+ include Gitlab::Utils::StrongMemoize
+
+ DEFAULT_PLATFORM = 'ruby'
+
+ def execute
+ return ServiceResponse.error(message: "forbidden", http_status: :forbidden) unless Ability.allowed?(current_user, :read_package, project)
+ return ServiceResponse.error(message: "#{gem_name} not found", http_status: :not_found) if packages.empty?
+
+ payload = packages.map do |package|
+ dependencies = package.dependency_links.map do |link|
+ [link.dependency.name, link.dependency.version_pattern]
+ end
+
+ {
+ name: gem_name,
+ number: package.version,
+ platform: DEFAULT_PLATFORM,
+ dependencies: dependencies
+ }
+ end
+
+ ServiceResponse.success(payload: payload)
+ end
+
+ private
+
+ def packages
+ strong_memoize(:packages) do
+ project.packages.with_name(gem_name)
+ end
+ end
+
+ def gem_name
+ params[:gem_name]
+ end
+ end
+ end
+end