end
end
+ def rebuild_single_tree!(root_id)
+ root = Issue.where(:parent_id => nil).find(root_id)
+ transaction do
+ where(root_id: root_id).reorder(:id).lock.ids
+ where(root_id: root_id).update_all(:lft => nil, :rgt => nil)
+ where(root_id: root_id, parent_id: nil).update_all(["lft = ?, rgt = ?", 1, 2])
+ rebuild_nodes(root_id)
+ end
+ end
+
private
def rebuild_nodes(parent_id = nil)
assert_equal ic2, ic4.parent
assert ic5.root?
end
+
+ def test_rebuild_single_tree
+ i1 = Issue.generate!
+ i2 = i1.generate_child!
+ i3 = i1.generate_child!
+ Issue.update_all(:lft => 7, :rgt => 7)
+
+ Issue.rebuild_single_tree!(i1.id)
+
+ i1.reload
+ assert_equal [1, 6], [i1.lft, i1.rgt]
+ i2.reload
+ assert_equal [2, 3], [i2.lft, i2.rgt]
+ i3.reload
+ assert_equal [4, 5], [i3.lft, i3.rgt]
+
+ other = Issue.find(1)
+ assert_equal [7, 7], [other.lft, other.rgt]
+ end
end