Adds a Project.rebuild_tree! method to force the rebuild of the nested set.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10867 e93f8b46-1217-0410-a6f0-8f06a7374b81
This commit is contained in:
parent
13f5301c09
commit
25c63ec747
|
@ -393,6 +393,15 @@ class Project < ActiveRecord::Base
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
# Recalculates all lft and rgt values based on project names
|
||||||
|
# Unlike Project.rebuild!, these values are recalculated even if the tree "looks" valid
|
||||||
|
def self.rebuild_tree!
|
||||||
|
transaction do
|
||||||
|
update_all "lft = NULL, rgt = NULL"
|
||||||
|
rebuild!(false)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
# Returns an array of the trackers used by the project and its active sub projects
|
# Returns an array of the trackers used by the project and its active sub projects
|
||||||
def rolled_up_trackers
|
def rolled_up_trackers
|
||||||
@rolled_up_trackers ||=
|
@rolled_up_trackers ||=
|
||||||
|
|
|
@ -54,6 +54,15 @@ class ProjectNestedSetTest < ActiveSupport::TestCase
|
||||||
assert_valid_nested_set
|
assert_valid_nested_set
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def test_rebuild_tree_should_build_valid_tree_even_with_valid_lft_rgt_values
|
||||||
|
Project.update_all "name = 'YY'", {:id => @a.id }
|
||||||
|
# lft and rgt values are still valid (Project.rebuild! would not update anything)
|
||||||
|
# but projects are not ordered properly (YY is in the first place)
|
||||||
|
|
||||||
|
Project.rebuild_tree!
|
||||||
|
assert_valid_nested_set
|
||||||
|
end
|
||||||
|
|
||||||
def test_moving_a_child_to_a_different_parent_should_keep_valid_tree
|
def test_moving_a_child_to_a_different_parent_should_keep_valid_tree
|
||||||
assert_no_difference 'Project.count' do
|
assert_no_difference 'Project.count' do
|
||||||
Project.find_by_name('B1').set_parent!(Project.find_by_name('A2'))
|
Project.find_by_name('B1').set_parent!(Project.find_by_name('A2'))
|
||||||
|
|
Loading…
Reference in New Issue