mirror of
https://github.com/astuto/astuto.git
synced 2025-12-15 03:07:52 +01:00
Add order to Boards
This commit is contained in:
@@ -11,6 +11,7 @@ class BoardDashboard < Administrate::BaseDashboard
|
||||
id: Field::Number,
|
||||
name: Field::String,
|
||||
description: Field::Text,
|
||||
order: Field::Number,
|
||||
created_at: Field::DateTime,
|
||||
updated_at: Field::DateTime,
|
||||
}.freeze
|
||||
@@ -23,6 +24,7 @@ class BoardDashboard < Administrate::BaseDashboard
|
||||
COLLECTION_ATTRIBUTES = %i[
|
||||
name
|
||||
description
|
||||
order
|
||||
].freeze
|
||||
|
||||
# SHOW_PAGE_ATTRIBUTES
|
||||
@@ -31,6 +33,7 @@ class BoardDashboard < Administrate::BaseDashboard
|
||||
id
|
||||
name
|
||||
description
|
||||
order
|
||||
created_at
|
||||
updated_at
|
||||
].freeze
|
||||
@@ -41,6 +44,7 @@ class BoardDashboard < Administrate::BaseDashboard
|
||||
FORM_ATTRIBUTES = %i[
|
||||
name
|
||||
description
|
||||
order
|
||||
].freeze
|
||||
|
||||
# COLLECTION_FILTERS
|
||||
|
||||
@@ -1,4 +1,14 @@
|
||||
class Board < ApplicationRecord
|
||||
after_initialize :set_order_to_last
|
||||
|
||||
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
|
||||
|
||||
@@ -1,4 +1,6 @@
|
||||
class PostStatus < ApplicationRecord
|
||||
after_initialize :set_order_to_last
|
||||
|
||||
validates :name, presence: true, uniqueness: true
|
||||
validates :color, format: { with: /\A#(?:[0-9a-fA-F]{3}){1,2}\z/ }
|
||||
validates :order, numericality: { only_integer: true, greater_than: 0 }
|
||||
@@ -9,4 +11,12 @@ class PostStatus < ApplicationRecord
|
||||
.order(order: :asc)
|
||||
end
|
||||
end
|
||||
|
||||
def set_order_to_last
|
||||
return unless new_record?
|
||||
return unless order.nil?
|
||||
|
||||
order_last = PostStatus.maximum(:order) || 0
|
||||
self.order = order_last + 1
|
||||
end
|
||||
end
|
||||
|
||||
5
db/migrate/20190918150418_add_order_to_boards.rb
Normal file
5
db/migrate/20190918150418_add_order_to_boards.rb
Normal file
@@ -0,0 +1,5 @@
|
||||
class AddOrderToBoards < ActiveRecord::Migration[6.0]
|
||||
def change
|
||||
add_column :boards, :order, :integer, null: false, default: 999
|
||||
end
|
||||
end
|
||||
@@ -0,0 +1,6 @@
|
||||
class RemoveDefaultOrderFromBoardsAndPostStatuses < ActiveRecord::Migration[6.0]
|
||||
def change
|
||||
change_column_default :boards, :order, nil
|
||||
change_column_default :post_statuses, :order, nil
|
||||
end
|
||||
end
|
||||
@@ -10,7 +10,7 @@
|
||||
#
|
||||
# It's strongly recommended that you check this file into your version control system.
|
||||
|
||||
ActiveRecord::Schema.define(version: 2019_09_16_131938) do
|
||||
ActiveRecord::Schema.define(version: 2019_09_18_151626) do
|
||||
|
||||
# These are extensions that must be enabled in order to support this database
|
||||
enable_extension "plpgsql"
|
||||
@@ -20,6 +20,7 @@ ActiveRecord::Schema.define(version: 2019_09_16_131938) do
|
||||
t.text "description"
|
||||
t.datetime "created_at", precision: 6, null: false
|
||||
t.datetime "updated_at", precision: 6, null: false
|
||||
t.integer "order", null: false
|
||||
t.index ["name"], name: "index_boards_on_name", unique: true
|
||||
end
|
||||
|
||||
@@ -40,7 +41,7 @@ ActiveRecord::Schema.define(version: 2019_09_16_131938) do
|
||||
t.string "color", null: false
|
||||
t.datetime "created_at", precision: 6, null: false
|
||||
t.datetime "updated_at", precision: 6, null: false
|
||||
t.integer "order", default: 999, null: false
|
||||
t.integer "order", null: false
|
||||
t.boolean "show_in_roadmap", default: false, null: false
|
||||
t.index ["name"], name: "index_post_statuses_on_name", unique: true
|
||||
end
|
||||
|
||||
@@ -2,5 +2,6 @@ FactoryBot.define do
|
||||
factory :board do
|
||||
sequence(:name) { |n| "Board#{n}" }
|
||||
description { 'My fantastic board' }
|
||||
order { 1 }
|
||||
end
|
||||
end
|
||||
|
||||
@@ -29,4 +29,13 @@ RSpec.describe Board, type: :model do
|
||||
expect(nil_description_board).to be_valid
|
||||
expect(empty_description_board).to be_valid
|
||||
end
|
||||
|
||||
it 'automatically sets order to last order if not specified' do
|
||||
order = 10
|
||||
board1 = FactoryBot.create(:board, order: order)
|
||||
board2 = Board.new
|
||||
|
||||
expect(board1.order).to eq(order)
|
||||
expect(board2.order).to eq(order + 1)
|
||||
end
|
||||
end
|
||||
|
||||
@@ -61,4 +61,13 @@ RSpec.describe PostStatus, type: :model do
|
||||
expect(roadmap.first).to eq(post_status3)
|
||||
expect(roadmap.second).to eq(post_status2)
|
||||
end
|
||||
|
||||
it 'automatically sets order to last order if not specified' do
|
||||
order = 10
|
||||
post_status1 = FactoryBot.create(:post_status, order: order)
|
||||
post_status2 = PostStatus.new
|
||||
|
||||
expect(post_status1.order).to eq(order)
|
||||
expect(post_status2.order).to eq(order + 1)
|
||||
end
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user