summaryrefslogtreecommitdiff
path: root/app/models/packages/conan/metadatum.rb
diff options
context:
space:
mode:
Diffstat (limited to 'app/models/packages/conan/metadatum.rb')
-rw-r--r--app/models/packages/conan/metadatum.rb27
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