42 lines
928 B
Ruby
42 lines
928 B
Ruby
|
# frozen_string_literal: true
|
||
|
|
||
|
class Packages::Conan::Metadatum < ApplicationRecord
|
||
|
belongs_to :package, -> { where(package_type: :conan) }, inverse_of: :conan_metadatum
|
||
|
|
||
|
validates :package, presence: true
|
||
|
|
||
|
validates :package_username,
|
||
|
presence: true,
|
||
|
format: { with: Gitlab::Regex.conan_recipe_component_regex }
|
||
|
|
||
|
validates :package_channel,
|
||
|
presence: true,
|
||
|
format: { with: Gitlab::Regex.conan_recipe_component_regex }
|
||
|
|
||
|
validate :conan_package_type
|
||
|
|
||
|
def recipe
|
||
|
"#{package.name}/#{package.version}@#{package_username}/#{package_channel}"
|
||
|
end
|
||
|
|
||
|
def recipe_path
|
||
|
recipe.tr('@', '/')
|
||
|
end
|
||
|
|
||
|
def self.package_username_from(full_path:)
|
||
|
full_path.tr('/', '+')
|
||
|
end
|
||
|
|
||
|
def self.full_path_from(package_username:)
|
||
|
package_username.tr('+', '/')
|
||
|
end
|
||
|
|
||
|
private
|
||
|
|
||
|
def conan_package_type
|
||
|
unless package&.conan?
|
||
|
errors.add(:base, _('Package type must be Conan'))
|
||
|
end
|
||
|
end
|
||
|
end
|