File: package_reference.rb

package info (click to toggle)
gitlab 17.6.5-19
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 629,368 kB
  • sloc: ruby: 1,915,304; javascript: 557,307; sql: 60,639; xml: 6,509; sh: 4,567; makefile: 1,239; python: 406
file content (42 lines) | stat: -rw-r--r-- 1,386 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
# frozen_string_literal: true

module Packages
  module Conan
    class PackageReference < ApplicationRecord
      include ShaAttribute

      REFERENCE_LENGTH_MAX = 20
      MAX_INFO_SIZE = 20_000

      sha_attribute :reference

      belongs_to :package, class_name: 'Packages::Conan::Package',
        inverse_of: :conan_package_references
      belongs_to :recipe_revision, class_name: 'Packages::Conan::RecipeRevision',
        inverse_of: :conan_package_references
      belongs_to :project

      has_many :package_revisions, inverse_of: :package_reference, class_name: 'Packages::Conan::PackageRevision'
      has_many :file_metadata, inverse_of: :package_reference, class_name: 'Packages::Conan::FileMetadatum'

      validates :package, :project, presence: true
      validates :reference, presence: true, bytesize: { maximum: -> { REFERENCE_LENGTH_MAX } },
        uniqueness: { scope: [:package_id, :recipe_revision_id] }
      validates :info, json_schema: { filename: 'conan_package_info', detail_errors: true }
      validate :ensure_info_size

      private

      def ensure_info_size
        return if info.to_s.size <= MAX_INFO_SIZE

        errors.add(:info, :too_large,
          message: format(
            _('conaninfo is too large. Maximum size is %{max_size} characters'),
            max_size: MAX_INFO_SIZE
          )
        )
      end
    end
  end
end