115 lines
3.3 KiB
Ruby
115 lines
3.3 KiB
Ruby
|
# frozen_string_literal: true
|
||
|
|
||
|
module Packages
|
||
|
module Conan
|
||
|
class PackagePresenter
|
||
|
include API::Helpers::RelatedResourcesHelpers
|
||
|
include Gitlab::Utils::StrongMemoize
|
||
|
|
||
|
attr_reader :params
|
||
|
|
||
|
def initialize(recipe, user, project, params = {})
|
||
|
@recipe = recipe
|
||
|
@user = user
|
||
|
@project = project
|
||
|
@params = params
|
||
|
end
|
||
|
|
||
|
def recipe_urls
|
||
|
map_package_files do |package_file|
|
||
|
build_recipe_file_url(package_file) if package_file.conan_file_metadatum.recipe_file?
|
||
|
end
|
||
|
end
|
||
|
|
||
|
def recipe_snapshot
|
||
|
map_package_files do |package_file|
|
||
|
package_file.file_md5 if package_file.conan_file_metadatum.recipe_file?
|
||
|
end
|
||
|
end
|
||
|
|
||
|
def package_urls
|
||
|
map_package_files do |package_file|
|
||
|
next unless package_file.conan_file_metadatum.package_file? && matching_reference?(package_file)
|
||
|
|
||
|
build_package_file_url(package_file)
|
||
|
end
|
||
|
end
|
||
|
|
||
|
def package_snapshot
|
||
|
map_package_files do |package_file|
|
||
|
next unless package_file.conan_file_metadatum.package_file? && matching_reference?(package_file)
|
||
|
|
||
|
package_file.file_md5
|
||
|
end
|
||
|
end
|
||
|
|
||
|
private
|
||
|
|
||
|
def build_recipe_file_url(package_file)
|
||
|
expose_url(
|
||
|
api_v4_packages_conan_v1_files_export_path(
|
||
|
package_name: package.name,
|
||
|
package_version: package.version,
|
||
|
package_username: package.conan_metadatum.package_username,
|
||
|
package_channel: package.conan_metadatum.package_channel,
|
||
|
recipe_revision: package_file.conan_file_metadatum.recipe_revision,
|
||
|
file_name: package_file.file_name
|
||
|
)
|
||
|
)
|
||
|
end
|
||
|
|
||
|
def build_package_file_url(package_file)
|
||
|
expose_url(
|
||
|
api_v4_packages_conan_v1_files_package_path(
|
||
|
package_name: package.name,
|
||
|
package_version: package.version,
|
||
|
package_username: package.conan_metadatum.package_username,
|
||
|
package_channel: package.conan_metadatum.package_channel,
|
||
|
recipe_revision: package_file.conan_file_metadatum.recipe_revision,
|
||
|
conan_package_reference: package_file.conan_file_metadatum.conan_package_reference,
|
||
|
package_revision: package_file.conan_file_metadatum.package_revision,
|
||
|
file_name: package_file.file_name
|
||
|
)
|
||
|
)
|
||
|
end
|
||
|
|
||
|
def map_package_files
|
||
|
package_files.to_a.map do |package_file|
|
||
|
key = package_file.file_name
|
||
|
value = yield(package_file)
|
||
|
next unless key && value
|
||
|
|
||
|
[key, value]
|
||
|
end.compact.to_h
|
||
|
end
|
||
|
|
||
|
def package_files
|
||
|
return unless package
|
||
|
|
||
|
@package_files ||= package.package_files.preload_conan_file_metadata
|
||
|
end
|
||
|
|
||
|
def package
|
||
|
strong_memoize(:package) do
|
||
|
name, version = @recipe.split('@')[0].split('/')
|
||
|
|
||
|
@project.packages
|
||
|
.conan
|
||
|
.with_name(name)
|
||
|
.with_version(version)
|
||
|
.order_created
|
||
|
.last
|
||
|
end
|
||
|
end
|
||
|
|
||
|
def matching_reference?(package_file)
|
||
|
package_file.conan_file_metadatum.conan_package_reference == conan_package_reference
|
||
|
end
|
||
|
|
||
|
def conan_package_reference
|
||
|
params[:conan_package_reference]
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
end
|