diff options
Diffstat (limited to 'app/models/concerns/packages/debian/component.rb')
-rw-r--r-- | app/models/concerns/packages/debian/component.rb | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/app/models/concerns/packages/debian/component.rb b/app/models/concerns/packages/debian/component.rb new file mode 100644 index 00000000000..7b342c7b684 --- /dev/null +++ b/app/models/concerns/packages/debian/component.rb @@ -0,0 +1,31 @@ +# frozen_string_literal: true + +module Packages + module Debian + module Component + extend ActiveSupport::Concern + + included do + belongs_to :distribution, class_name: "Packages::Debian::#{container_type.capitalize}Distribution", inverse_of: :components + # files must be destroyed by ruby code in order to properly remove carrierwave uploads + has_many :files, + class_name: "Packages::Debian::#{container_type.capitalize}ComponentFile", + foreign_key: :component_id, + inverse_of: :component, + dependent: :destroy # rubocop:disable Cop/ActiveRecordDependent + + validates :distribution, + presence: true + + validates :name, + presence: true, + length: { maximum: 255 }, + uniqueness: { scope: %i[distribution_id] }, + format: { with: Gitlab::Regex.debian_component_regex } + + scope :with_distribution, ->(distribution) { where(distribution: distribution) } + scope :with_name, ->(name) { where(name: name) } + end + end + end +end |