2019-08-24 12:06:48 +02:00
|
|
|
class PostStatus < ApplicationRecord
|
2019-09-24 21:16:51 +02:00
|
|
|
has_many :posts, dependent: :nullify
|
|
|
|
|
|
2019-09-18 21:12:52 +02:00
|
|
|
after_initialize :set_random_color, :set_order_to_last
|
2022-05-01 18:00:38 +02:00
|
|
|
after_destroy :ensure_coherent_order
|
2019-09-18 21:00:38 +02:00
|
|
|
|
2019-08-24 12:06:48 +02:00
|
|
|
validates :name, presence: true, uniqueness: true
|
|
|
|
|
validates :color, format: { with: /\A#(?:[0-9a-fA-F]{3}){1,2}\z/ }
|
2022-05-01 18:00:38 +02:00
|
|
|
validates :order, presence: true, numericality: { only_integer: true, greater_than_or_equal_to: 0 }
|
2019-09-09 16:50:33 +02:00
|
|
|
|
|
|
|
|
class << self
|
|
|
|
|
def find_roadmap
|
|
|
|
|
where(show_in_roadmap: true)
|
|
|
|
|
.order(order: :asc)
|
|
|
|
|
end
|
|
|
|
|
end
|
2019-09-18 21:00:38 +02:00
|
|
|
|
2019-09-18 21:12:52 +02:00
|
|
|
def set_random_color
|
|
|
|
|
return unless new_record?
|
|
|
|
|
return unless color.nil?
|
|
|
|
|
|
|
|
|
|
self.color = '#' + Random.bytes(3).unpack1('H*')
|
|
|
|
|
end
|
|
|
|
|
|
2019-09-18 21:00:38 +02:00
|
|
|
def set_order_to_last
|
|
|
|
|
return unless new_record?
|
|
|
|
|
return unless order.nil?
|
|
|
|
|
|
2022-05-01 18:00:38 +02:00
|
|
|
order_last = PostStatus.maximum(:order) || -1
|
2019-09-18 21:00:38 +02:00
|
|
|
self.order = order_last + 1
|
|
|
|
|
end
|
2022-05-01 18:00:38 +02:00
|
|
|
|
|
|
|
|
def ensure_coherent_order
|
|
|
|
|
EnsureCoherentOrderingWorkflow.new(
|
|
|
|
|
entity_classname: PostStatus,
|
|
|
|
|
column_name: 'order'
|
|
|
|
|
).run
|
|
|
|
|
end
|
2019-08-24 12:06:48 +02:00
|
|
|
end
|