mirror of
https://github.com/astuto/astuto.git
synced 2025-12-16 11:47:56 +01:00
Add Boards management to sitesettings (#107)
This commit is contained in:
committed by
GitHub
parent
7b8a4d6709
commit
6be2394dc5
@@ -1,16 +1,8 @@
|
||||
class Board < ApplicationRecord
|
||||
has_many :posts, dependent: :destroy
|
||||
include Orderable
|
||||
|
||||
after_initialize :set_order_to_last
|
||||
has_many :posts, dependent: :destroy
|
||||
|
||||
validates :name, presence: true, uniqueness: true
|
||||
validates :description, length: { in: 0..1024 }, allow_nil: true
|
||||
|
||||
def set_order_to_last
|
||||
return unless new_record?
|
||||
return unless order.nil?
|
||||
|
||||
order_last = Board.maximum(:order) || 0
|
||||
self.order = order_last + 1
|
||||
end
|
||||
end
|
||||
|
||||
35
app/models/concerns/Orderable.rb
Normal file
35
app/models/concerns/Orderable.rb
Normal file
@@ -0,0 +1,35 @@
|
||||
# An Orderable model is a model with an 'order' column
|
||||
|
||||
# 1) An new Orderable entity gets, by default, an
|
||||
# 'order' equal to current maximum order + 1
|
||||
# 2) When an Orderable entity gets deleted
|
||||
# all other entities are reordered to be consistent
|
||||
|
||||
# Note: update is not handled by the Orderable concern,
|
||||
# but rather in the entity controller action "update_order"
|
||||
|
||||
module Orderable
|
||||
extend ActiveSupport::Concern
|
||||
|
||||
included do
|
||||
after_initialize :set_order_to_last
|
||||
after_destroy :ensure_coherent_order
|
||||
|
||||
validates :order, presence: true, numericality: { only_integer: true, greater_than_or_equal_to: 0 }
|
||||
|
||||
def set_order_to_last
|
||||
return unless new_record?
|
||||
return unless order.nil?
|
||||
|
||||
order_last = self.class.maximum(:order) || -1
|
||||
self.order = order_last + 1
|
||||
end
|
||||
|
||||
def ensure_coherent_order
|
||||
EnsureCoherentOrderingWorkflow.new(
|
||||
entity_classname: self.class,
|
||||
column_name: 'order'
|
||||
).run
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -1,12 +1,10 @@
|
||||
class PostStatus < ApplicationRecord
|
||||
has_many :posts, dependent: :nullify
|
||||
include Orderable
|
||||
|
||||
after_initialize :set_random_color, :set_order_to_last
|
||||
after_destroy :ensure_coherent_order
|
||||
has_many :posts, dependent: :nullify
|
||||
|
||||
validates :name, presence: true, uniqueness: true
|
||||
validates :color, format: { with: /\A#(?:[0-9a-fA-F]{3}){1,2}\z/ }
|
||||
validates :order, presence: true, numericality: { only_integer: true, greater_than_or_equal_to: 0 }
|
||||
|
||||
class << self
|
||||
def find_roadmap
|
||||
@@ -14,26 +12,4 @@ class PostStatus < ApplicationRecord
|
||||
.order(order: :asc)
|
||||
end
|
||||
end
|
||||
|
||||
def set_random_color
|
||||
return unless new_record?
|
||||
return unless color.nil?
|
||||
|
||||
self.color = '#' + Random.bytes(3).unpack1('H*')
|
||||
end
|
||||
|
||||
def set_order_to_last
|
||||
return unless new_record?
|
||||
return unless order.nil?
|
||||
|
||||
order_last = PostStatus.maximum(:order) || -1
|
||||
self.order = order_last + 1
|
||||
end
|
||||
|
||||
def ensure_coherent_order
|
||||
EnsureCoherentOrderingWorkflow.new(
|
||||
entity_classname: PostStatus,
|
||||
column_name: 'order'
|
||||
).run
|
||||
end
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user