24 lines
855 B
Ruby
24 lines
855 B
Ruby
|
# frozen_string_literal: true
|
||
|
|
||
|
module Ci
|
||
|
class Ref < ApplicationRecord
|
||
|
extend Gitlab::Ci::Model
|
||
|
|
||
|
STATUSES = %w[success failed fixed].freeze
|
||
|
|
||
|
belongs_to :project
|
||
|
belongs_to :last_updated_by_pipeline, foreign_key: :last_updated_by_pipeline_id, class_name: 'Ci::Pipeline'
|
||
|
# ActiveRecord doesn't support composite FKs for this reason we have to do the 'unscope(:where)'
|
||
|
# hack.
|
||
|
has_many :pipelines, ->(ref) {
|
||
|
# We use .read_attribute to save 1 extra unneeded query to load the :project.
|
||
|
unscope(:where)
|
||
|
.where(ref: ref.ref, project_id: ref.read_attribute(:project_id), tag: ref.tag)
|
||
|
# Sadly :inverse_of is not supported (yet) by Rails for composite PKs.
|
||
|
}, inverse_of: :ref_status
|
||
|
|
||
|
validates :status, inclusion: { in: STATUSES }
|
||
|
validates :last_updated_by_pipeline, presence: true
|
||
|
end
|
||
|
end
|