diff options
Diffstat (limited to 'app/models/packages/conan/metadatum.rb')
-rw-r--r-- | app/models/packages/conan/metadatum.rb | 27 |
1 files changed, 21 insertions, 6 deletions
diff --git a/app/models/packages/conan/metadatum.rb b/app/models/packages/conan/metadatum.rb index 7ec2641177a..58af34879af 100644 --- a/app/models/packages/conan/metadatum.rb +++ b/app/models/packages/conan/metadatum.rb @@ -1,19 +1,19 @@ # frozen_string_literal: true class Packages::Conan::Metadatum < ApplicationRecord + NONE_VALUE = '_' + 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 } + :package_channel, + presence: true, + format: { with: Gitlab::Regex.conan_recipe_user_channel_regex } validate :conan_package_type + validate :username_channel_none_values def recipe "#{package.name}/#{package.version}@#{package_username}/#{package_channel}" @@ -31,6 +31,15 @@ class Packages::Conan::Metadatum < ApplicationRecord package_username.tr('+', '/') end + def self.validate_username_and_channel(username, channel) + return if (username != NONE_VALUE && channel != NONE_VALUE) || + (username == NONE_VALUE && channel == NONE_VALUE) + + none_field = username == NONE_VALUE ? :username : :channel + + yield(none_field) + end + private def conan_package_type @@ -38,4 +47,10 @@ class Packages::Conan::Metadatum < ApplicationRecord errors.add(:base, _('Package type must be Conan')) end end + + def username_channel_none_values + self.class.validate_username_and_channel(package_username, package_channel) do |none_field| + errors.add("package_#{none_field}".to_sym, _("can't be solely blank")) + end + end end |