Moved acts_as_tree into a plugin of the same name on the official Rails svn (closes #9514) [lifofifo]

git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@7454 5ecf4fe2-1ee6-0310-87b1-e25e094e27de
This commit is contained in:
David Heinemeier Hansson
2007-09-11 03:25:59 +00:00
parent 11f4d28344
commit ea0975a20b
7 changed files with 9 additions and 362 deletions

View File

@@ -5,7 +5,6 @@ require 'fixtures/comment'
require 'fixtures/author'
require 'fixtures/category'
require 'fixtures/categorization'
require 'fixtures/mixin'
require 'fixtures/company'
require 'fixtures/topic'
require 'fixtures/reply'
@@ -53,16 +52,6 @@ class CascadedEagerLoadingTest < Test::Unit::TestCase
assert_equal 5, authors[0].posts.size
end
def test_eager_association_loading_with_acts_as_tree
roots = TreeMixin.find(:all, :include=>"children", :conditions=>"mixins.parent_id IS NULL", :order=>"mixins.id")
assert_equal mixins(:tree_1, :tree2_1, :tree3_1), roots
assert_no_queries do
assert_equal 2, roots[0].children.size
assert_equal 0, roots[1].children.size
assert_equal 0, roots[2].children.size
end
end
def test_eager_association_loading_with_cascaded_three_levels_by_ping_pong
firms = Firm.find(:all, :include=>{:account=>{:firm=>:account}}, :order=>"companies.id")
assert_equal 2, firms.size
@@ -103,24 +92,8 @@ class CascadedEagerLoadingTest < Test::Unit::TestCase
authors.first.posts.first.special_comments.first.post.very_special_comment
end
end
def test_eager_association_loading_with_recursive_cascading_three_levels_has_many
root_node = RecursivelyCascadedTreeMixin.find(:first, :include=>{:children=>{:children=>:children}}, :order => 'mixins.id')
assert_equal mixins(:recursively_cascaded_tree_4), assert_no_queries { root_node.children.first.children.first.children.first }
end
def test_eager_association_loading_with_recursive_cascading_three_levels_has_one
root_node = RecursivelyCascadedTreeMixin.find(:first, :include=>{:first_child=>{:first_child=>:first_child}}, :order => 'mixins.id')
assert_equal mixins(:recursively_cascaded_tree_4), assert_no_queries { root_node.first_child.first_child.first_child }
end
def test_eager_association_loading_with_recursive_cascading_three_levels_belongs_to
leaf_node = RecursivelyCascadedTreeMixin.find(:first, :include=>{:parent=>{:parent=>:parent}}, :order => 'mixins.id DESC')
assert_equal mixins(:recursively_cascaded_tree_1), assert_no_queries { leaf_node.parent.parent.parent }
end
end
require 'fixtures/vertex'
require 'fixtures/edge'
class CascadedEagerLoadingTest < Test::Unit::TestCase

View File

@@ -1,73 +0,0 @@
class Mixin < ActiveRecord::Base
end
class TreeMixin < Mixin
acts_as_tree :foreign_key => "parent_id", :order => "id"
end
class TreeMixinWithoutOrder < Mixin
acts_as_tree :foreign_key => "parent_id"
end
class RecursivelyCascadedTreeMixin < Mixin
acts_as_tree :foreign_key => "parent_id"
has_one :first_child, :class_name => 'RecursivelyCascadedTreeMixin', :foreign_key => :parent_id
end
class NestedSet < Mixin
acts_as_nested_set :scope => "root_id IS NULL"
def self.table_name() "mixins" end
end
class NestedSetWithStringScope < Mixin
acts_as_nested_set :scope => 'root_id = #{root_id}'
def self.table_name() "mixins" end
end
class NestedSetWithSymbolScope < Mixin
acts_as_nested_set :scope => :root
def self.table_name() "mixins" end
end
class NestedSetSuperclass < Mixin
acts_as_nested_set :scope => :root
def self.table_name() "mixins" end
end
class NestedSetSubclass < NestedSetSuperclass
end
class NestedSet < Mixin
acts_as_nested_set :scope => "root_id IS NULL"
def self.table_name() "mixins" end
end
class NestedSetWithStringScope < Mixin
acts_as_nested_set :scope => 'root_id = #{root_id}'
def self.table_name() "mixins" end
end
class NestedSetWithSymbolScope < Mixin
acts_as_nested_set :scope => :root
def self.table_name() "mixins" end
end
class NestedSetSuperclass < Mixin
acts_as_nested_set :scope => :root
def self.table_name() "mixins" end
end
class NestedSetSubclass < NestedSetSuperclass
end

View File

@@ -1,71 +1,8 @@
# tree mixins
tree_1:
id: 1001
type: TreeMixin
parent_id:
tree_2:
id: 1002
type: TreeMixin
parent_id: 1001
tree_3:
id: 1003
type: TreeMixin
parent_id: 1002
tree_4:
id: 1004
type: TreeMixin
parent_id: 1001
tree2_1:
id: 1005
type: TreeMixin
parent_id:
tree3_1:
id: 1006
type: TreeMixin
parent_id:
tree_without_order_1:
id: 1101
type: TreeMixinWithoutOrder
parent_id:
tree_without_order_2:
id: 1100
type: TreeMixinWithoutOrder
parent_id:
recursively_cascaded_tree_1:
id: 5005
type: RecursivelyCascadedTreeMixin
parent_id:
recursively_cascaded_tree_2:
id: 5006
type: RecursivelyCascadedTreeMixin
parent_id: 5005
recursively_cascaded_tree_3:
id: 5007
type: RecursivelyCascadedTreeMixin
parent_id: 5006
recursively_cascaded_tree_4:
id: 5008
type: RecursivelyCascadedTreeMixin
parent_id: 5007
# Nested set mixins
<% (1..10).each do |counter| %>
set_<%= counter %>:
id: <%= counter+3000 %>
type: NestedSet
<% end %>
# Big old set

View File

@@ -1,7 +1,9 @@
require 'abstract_unit'
require 'active_record/acts/tree'
require 'active_record/acts/nested_set'
require 'fixtures/mixin'
class Mixin < ActiveRecord::Base
end
# Let us control what Time.now returns for the TouchTest suite
class Time
@@ -21,98 +23,6 @@ class Time
end
class TreeTest < Test::Unit::TestCase
fixtures :mixins
def test_children
assert_equal mixins(:tree_1).children, mixins(:tree_2, :tree_4)
assert_equal mixins(:tree_2).children, [mixins(:tree_3)]
assert_equal mixins(:tree_3).children, []
assert_equal mixins(:tree_4).children, []
end
def test_parent
assert_equal mixins(:tree_2).parent, mixins(:tree_1)
assert_equal mixins(:tree_2).parent, mixins(:tree_4).parent
assert_nil mixins(:tree_1).parent
end
def test_delete
assert_equal 6, TreeMixin.count
mixins(:tree_1).destroy
assert_equal 2, TreeMixin.count
mixins(:tree2_1).destroy
mixins(:tree3_1).destroy
assert_equal 0, TreeMixin.count
end
def test_insert
@extra = mixins(:tree_1).children.create
assert @extra
assert_equal @extra.parent, mixins(:tree_1)
assert_equal 3, mixins(:tree_1).children.size
assert mixins(:tree_1).children.include?(@extra)
assert mixins(:tree_1).children.include?(mixins(:tree_2))
assert mixins(:tree_1).children.include?(mixins(:tree_4))
end
def test_ancestors
assert_equal [], mixins(:tree_1).ancestors
assert_equal [mixins(:tree_1)], mixins(:tree_2).ancestors
assert_equal mixins(:tree_2, :tree_1), mixins(:tree_3).ancestors
assert_equal [mixins(:tree_1)], mixins(:tree_4).ancestors
assert_equal [], mixins(:tree2_1).ancestors
assert_equal [], mixins(:tree3_1).ancestors
end
def test_root
assert_equal mixins(:tree_1), TreeMixin.root
assert_equal mixins(:tree_1), mixins(:tree_1).root
assert_equal mixins(:tree_1), mixins(:tree_2).root
assert_equal mixins(:tree_1), mixins(:tree_3).root
assert_equal mixins(:tree_1), mixins(:tree_4).root
assert_equal mixins(:tree2_1), mixins(:tree2_1).root
assert_equal mixins(:tree3_1), mixins(:tree3_1).root
end
def test_roots
assert_equal mixins(:tree_1, :tree2_1, :tree3_1), TreeMixin.roots
end
def test_siblings
assert_equal mixins(:tree2_1, :tree3_1), mixins(:tree_1).siblings
assert_equal [mixins(:tree_4)], mixins(:tree_2).siblings
assert_equal [], mixins(:tree_3).siblings
assert_equal [mixins(:tree_2)], mixins(:tree_4).siblings
assert_equal mixins(:tree_1, :tree3_1), mixins(:tree2_1).siblings
assert_equal mixins(:tree_1, :tree2_1), mixins(:tree3_1).siblings
end
def test_self_and_siblings
assert_equal mixins(:tree_1, :tree2_1, :tree3_1), mixins(:tree_1).self_and_siblings
assert_equal mixins(:tree_2, :tree_4), mixins(:tree_2).self_and_siblings
assert_equal [mixins(:tree_3)], mixins(:tree_3).self_and_siblings
assert_equal mixins(:tree_2, :tree_4), mixins(:tree_4).self_and_siblings
assert_equal mixins(:tree_1, :tree2_1, :tree3_1), mixins(:tree2_1).self_and_siblings
assert_equal mixins(:tree_1, :tree2_1, :tree3_1), mixins(:tree3_1).self_and_siblings
end
end
class TreeTestWithoutOrder < Test::Unit::TestCase
fixtures :mixins
def test_root
assert mixins(:tree_without_order_1, :tree_without_order_2).include?(TreeMixinWithoutOrder.root)
end
def test_roots
assert_equal [], mixins(:tree_without_order_1, :tree_without_order_2) - TreeMixinWithoutOrder.roots
end
end
class TouchTest < Test::Unit::TestCase
fixtures :mixins
@@ -170,15 +80,11 @@ class TouchTest < Test::Unit::TestCase
def test_create_turned_off
Mixin.record_timestamps = false
assert_nil mixins(:tree_1).updated_at
mixins(:tree_1).save
assert_nil mixins(:tree_1).updated_at
assert_nil mixins(:set_1).updated_at
mixins(:set_1).save
assert_nil mixins(:set_1).updated_at
Mixin.record_timestamps = true
end
end
end