diff options
Diffstat (limited to 'app/models/packages/debian/file_metadatum.rb')
-rw-r--r-- | app/models/packages/debian/file_metadatum.rb | 56 |
1 files changed, 56 insertions, 0 deletions
diff --git a/app/models/packages/debian/file_metadatum.rb b/app/models/packages/debian/file_metadatum.rb new file mode 100644 index 00000000000..7c9f4f5f3f1 --- /dev/null +++ b/app/models/packages/debian/file_metadatum.rb @@ -0,0 +1,56 @@ +# frozen_string_literal: true + +class Packages::Debian::FileMetadatum < ApplicationRecord + belongs_to :package_file, inverse_of: :debian_file_metadatum + + validates :package_file, presence: true + validate :valid_debian_package_type + + enum file_type: { + unknown: 1, source: 2, dsc: 3, deb: 4, udeb: 5, buildinfo: 6, changes: 7 + } + + validates :file_type, presence: true + validates :file_type, inclusion: { in: %w[unknown] }, if: -> { package_file&.package&.debian_incoming? } + validates :file_type, + inclusion: { in: %w[source dsc deb udeb buildinfo changes] }, + if: -> { package_file&.package&.debian_package? } + + validates :component, + presence: true, + format: { with: Gitlab::Regex.debian_component_regex }, + if: :requires_component? + validates :component, absence: true, unless: :requires_component? + + validates :architecture, + presence: true, + format: { with: Gitlab::Regex.debian_architecture_regex }, + if: :requires_architecture? + validates :architecture, absence: true, unless: :requires_architecture? + + validates :fields, + presence: true, + json_schema: { filename: "debian_fields" }, + if: :requires_fields? + validates :fields, absence: true, unless: :requires_fields? + + private + + def valid_debian_package_type + return if package_file&.package&.debian? + + errors.add(:package_file, _('Package type must be Debian')) + end + + def requires_architecture? + deb? || udeb? + end + + def requires_component? + source? || dsc? || requires_architecture? || buildinfo? + end + + def requires_fields? + dsc? || requires_architecture? || buildinfo? || changes? + end +end |