Files
astuto/app/models/post_status.rb

40 lines
982 B
Ruby
Raw Normal View History

2019-08-24 12:06:48 +02:00
class PostStatus < ApplicationRecord
2019-09-24 21:16:51 +02:00
has_many :posts, dependent: :nullify
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 }
class << self
def find_roadmap
where(show_in_roadmap: true)
.order(order: :asc)
end
end
2019-09-18 21:00:38 +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