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 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70
|
# frozen_string_literal: true
class PartitionedRecord < ActiveRecord::Base
self.abstract_class = true
alias_method :reset, :reload
end
class Project < ActiveRecord::Base
has_many :pipelines
end
class Pipeline < PartitionedRecord
belongs_to :project
query_constraints :id, :partition_id
has_many :jobs,
->(pipeline) { where(partition_id: pipeline.partition_id) },
partition_foreign_key: :partition_id,
dependent: :destroy
has_many :unpartitioned_jobs,
->(pipeline) { where(pipeline: pipeline).order(id: :desc) },
partition_foreign_key: :partition_id,
dependent: :destroy,
class_name: 'Job'
end
class Job < PartitionedRecord
query_constraints :id, :partition_id
belongs_to :pipeline,
->(build) { where(partition_id: build.partition_id) },
partition_foreign_key: :partition_id
has_one :metadata,
->(build) { where(partition_id: build.partition_id) },
foreign_key: :job_id,
partition_foreign_key: :partition_id,
inverse_of: :job,
autosave: true
has_one :test_metadata,
->(build) { where(partition_id: build.partition_id, test_flag: true) },
foreign_key: :job_id,
partition_foreign_key: :partition_id,
inverse_of: :job,
class_name: 'Metadata'
accepts_nested_attributes_for :metadata
end
class Metadata < PartitionedRecord
self.table_name = :metadata
query_constraints :id, :partition_id
belongs_to :job,
->(metadata) { where(partition_id: metadata.partition_id) }
end
class LockingJob < PartitionedRecord
self.table_name = :locking_jobs
query_constraints :id, :partition_id
enum status: { created: 0, completed: 1 }
def locking_enabled?
will_save_change_to_status?
end
end
|