1
0
mirror of https://github.com/meineerde/redmine.git synced 2026-01-02 13:49:42 +00:00

shorten long line of lib/redmine/nested_set/project_nested_set.rb

git-svn-id: http://svn.redmine.org/redmine/trunk@20592 e93f8b46-1217-0410-a6f0-8f06a7374b81
This commit is contained in:
Toshi MARUYAMA 2020-12-09 14:11:52 +00:00
parent d9ef95afd3
commit 4273e9decf

View File

@ -25,7 +25,11 @@ module Redmine
belongs_to :parent, :class_name => self.name
before_create :add_to_nested_set
before_update :move_in_nested_set, :if => lambda {|project| project.parent_id_changed? || project.name_changed?}
before_update(
:move_in_nested_set,
:if =>
lambda {|project| project.parent_id_changed? || project.name_changed?}
)
before_destroy :destroy_children
end
base.extend ClassMethods
@ -35,12 +39,16 @@ module Redmine
private
def target_lft
siblings_rgt = self.class.where(:parent_id => parent_id).where("name < ?", name).maximum(:rgt)
siblings_rgt =
self.class.where(:parent_id => parent_id).where("name < ?", name).maximum(:rgt)
if siblings_rgt
siblings_rgt + 1
elsif parent_id
parent_lft = self.class.where(:id => parent_id).pluck(:lft).first
raise "Project id=#{id} with parent_id=#{parent_id}: parent missing or without 'lft' value" unless parent_lft
unless parent_lft
raise "Project id=#{id} with parent_id=#{parent_id}: parent missing or without 'lft' value"
end
parent_lft + 1
else
1
@ -53,7 +61,7 @@ module Redmine
self.rgt = lft + 1
self.class.where("lft >= ? OR rgt >= ?", lft, lft).update_all(
[
"lft = CASE WHEN lft >= :lft THEN lft + 2 ELSE lft END, " +
"lft = CASE WHEN lft >= :lft THEN lft + 2 ELSE lft END, " \
"rgt = CASE WHEN rgt >= :lft THEN rgt + 2 ELSE rgt END",
{:lft => lft}
]
@ -70,21 +78,33 @@ module Redmine
if c > a
# Moving to the right
d = c - (b - a + 1)
scope = self.class.where(["lft BETWEEN :a AND :c - 1 OR rgt BETWEEN :a AND :c - 1", {:a => a, :c => c}])
scope =
self.class.where(
["lft BETWEEN :a AND :c - 1 OR rgt BETWEEN :a AND :c - 1",
{:a => a, :c => c}]
)
scope.update_all(
[
"lft = CASE WHEN lft BETWEEN :a AND :b THEN lft + (:d - :a) WHEN lft BETWEEN :b + 1 AND :c - 1 THEN lft - (:b - :a + 1) ELSE lft END, " +
"rgt = CASE WHEN rgt BETWEEN :a AND :b THEN rgt + (:d - :a) WHEN rgt BETWEEN :b + 1 AND :c - 1 THEN rgt - (:b - :a + 1) ELSE rgt END",
"lft = CASE WHEN lft BETWEEN :a AND :b THEN lft + (:d - :a) " \
"WHEN lft BETWEEN :b + 1 AND :c - 1 THEN lft - (:b - :a + 1) ELSE lft END, " \
"rgt = CASE WHEN rgt BETWEEN :a AND :b THEN rgt + (:d - :a) " \
"WHEN rgt BETWEEN :b + 1 AND :c - 1 THEN rgt - (:b - :a + 1) ELSE rgt END",
{:a => a, :b => b, :c => c, :d => d}
]
)
elsif c < a
# Moving to the left
scope = self.class.where("lft BETWEEN :c AND :b OR rgt BETWEEN :c AND :b", {:a => a, :b => b, :c => c})
scope =
self.class.where(
"lft BETWEEN :c AND :b OR rgt BETWEEN :c AND :b",
{:a => a, :b => b, :c => c}
)
scope.update_all(
[
"lft = CASE WHEN lft BETWEEN :a AND :b THEN lft - (:a - :c) WHEN lft BETWEEN :c AND :a - 1 THEN lft + (:b - :a + 1) ELSE lft END, " +
"rgt = CASE WHEN rgt BETWEEN :a AND :b THEN rgt - (:a - :c) WHEN rgt BETWEEN :c AND :a - 1 THEN rgt + (:b - :a + 1) ELSE rgt END",
"lft = CASE WHEN lft BETWEEN :a AND :b THEN lft - (:a - :c) " \
"WHEN lft BETWEEN :c AND :a - 1 THEN lft + (:b - :a + 1) ELSE lft END, " \
"rgt = CASE WHEN rgt BETWEEN :a AND :b THEN rgt - (:a - :c) " \
"WHEN rgt BETWEEN :c AND :a - 1 THEN rgt + (:b - :a + 1) ELSE rgt END",
{:a => a, :b => b, :c => c, :d => d}
]
)
@ -102,7 +122,7 @@ module Redmine
unless @without_nested_set_update
self.class.where("lft > ? OR rgt > ?", lft, lft).update_all(
[
"lft = CASE WHEN lft > :lft THEN lft - :shift ELSE lft END, " +
"lft = CASE WHEN lft > :lft THEN lft - :shift ELSE lft END, " \
"rgt = CASE WHEN rgt > :lft THEN rgt - :shift ELSE rgt END",
{:lft => lft, :shift => rgt - lft + 1}
]