Add order to Boards

This commit is contained in:
riggraz
2019-09-18 21:00:38 +02:00
parent 876f77e000
commit 109381e791
9 changed files with 57 additions and 2 deletions

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -0,0 +1,5 @@
class AddOrderToBoards < ActiveRecord::Migration[6.0]
def change
add_column :boards, :order, :integer, null: false, default: 999
end
end

View File

@@ -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

View File

@@ -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

View File

@@ -2,5 +2,6 @@ FactoryBot.define do
factory :board do
sequence(:name) { |n| "Board#{n}" }
description { 'My fantastic board' }
order { 1 }
end
end

View File

@@ -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

View File

@@ -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