diff --git a/lib/closure_tree/hash_tree.rb b/lib/closure_tree/hash_tree.rb index f8be73b..388be65 100644 --- a/lib/closure_tree/hash_tree.rb +++ b/lib/closure_tree/hash_tree.rb @@ -11,7 +11,11 @@ def hash_tree(options = {}) # There is no default depth limit. This might be crazy-big, depending # on your tree shape. Hash huge trees at your own peril! def hash_tree(options = {}) - _ct.hash_tree(_ct.default_tree_scope(all, options[:limit_depth])) + if options[:limit_depth] + _ct.hash_tree(_ct.default_tree_scope(all, options[:limit_depth])) + else + _ct.hash_tree(all) + end end end end diff --git a/test/support/tag_examples.rb b/test/support/tag_examples.rb index 71553cb..77b5bf7 100644 --- a/test/support/tag_examples.rb +++ b/test/support/tag_examples.rb @@ -761,9 +761,19 @@ def assert_parent_and_children assert_equal @full_tree, @tag_class.hash_tree(limit_depth: 4) end + it 'joins the default scope when a limit_depth is given' do + queries = sql_queries { @tag_class.hash_tree(limit_depth: 2) } + assert queries.any? { |query| query.match?(%r{INNER JOIN \( SELECT descendant_id, MAX\(generations\) as depth}) } + end + it 'no limit' do assert_equal @full_tree, @tag_class.hash_tree end + + it 'does not join the default scope when there is no limit' do + queries = sql_queries { @tag_class.hash_tree } + assert_equal queries.any? { |query| query.match?(%r{INNER JOIN \( SELECT descendant_id, MAX\(generations\) as depth}) }, false + end end describe '.hash_tree' do @@ -805,6 +815,16 @@ def assert_parent_and_children assert_equal @full_tree[@a], @a.children.hash_tree end + it 'joins the default scope when a limit_depth is given' do + queries = sql_queries { @a.self_and_descendants.hash_tree(limit_depth: 2) } + assert queries.any? { |query| query.match?(%r{INNER JOIN \( SELECT descendant_id, MAX\(generations\) as depth}) } + end + + it 'does not join the default scope when there is no limit' do + queries = sql_queries { @a.self_and_descendants.hash_tree } + assert_equal queries.any? { |query| query.match?(%r{INNER JOIN \( SELECT descendant_id, MAX\(generations\) as depth}) }, false + end + it 'limit_depth 3 from b.parent' do assert_equal @three_tree.slice(@a), @b.parent.hash_tree(limit_depth: 3) end @@ -899,8 +919,6 @@ def assert_parent_and_children @c3 = @tag_class.find_or_create_by_path %w[a3 b3 c3] @b3 = @c3.parent @a3 = @b3.parent - - end it 'should return 0 for root' do