From becbdcf3eb0cd702fe2ebb35ac0def31ea585fec Mon Sep 17 00:00:00 2001 From: Ryan O'Donnell Date: Wed, 10 May 2017 14:31:07 -0700 Subject: [PATCH] Add leaves instance method --- lib/ancestry/instance_methods.rb | 6 ++++++ test/concerns/tree_navigration_test.rb | 12 ++++++++++++ 2 files changed, 18 insertions(+) diff --git a/lib/ancestry/instance_methods.rb b/lib/ancestry/instance_methods.rb index a5529b32..365e2730 100644 --- a/lib/ancestry/instance_methods.rb +++ b/lib/ancestry/instance_methods.rb @@ -279,6 +279,12 @@ def subtree_ids depth_options = {} subtree(depth_options).pluck(self.ancestry_base_class.primary_key) end + # Leaves + + def leaves + subtree.select{|node| node.childless? } + end + # Callback disabling def without_ancestry_callbacks diff --git a/test/concerns/tree_navigration_test.rb b/test/concerns/tree_navigration_test.rb index 496663c6..a6e1ecee 100644 --- a/test/concerns/tree_navigration_test.rb +++ b/test/concerns/tree_navigration_test.rb @@ -35,6 +35,11 @@ def test_tree_navigation assert_equal descendants.map(&:id), lvl0_node.descendant_ids assert_equal descendants, lvl0_node.descendants assert_equal [lvl0_node] + descendants, lvl0_node.subtree + # Leaves assertions + leaves = lvl0_node.descendants.select do |node| + node.childless? + end + assert_equal lvl0_node.leaves, leaves lvl0_children.each do |lvl1_node, lvl1_children| # Ancestors assertions @@ -68,6 +73,11 @@ def test_tree_navigation assert_equal descendants.map(&:id), lvl1_node.descendant_ids assert_equal descendants, lvl1_node.descendants assert_equal [lvl1_node] + descendants, lvl1_node.subtree + # Leaves assertions + leaves = lvl1_node.descendants.select do |node| + node.childless? + end + assert_equal lvl1_node.leaves, leaves lvl1_children.each do |lvl2_node, lvl2_children| # Ancestors assertions @@ -101,6 +111,8 @@ def test_tree_navigation assert_equal descendants.map(&:id), lvl2_node.descendant_ids assert_equal descendants, lvl2_node.descendants assert_equal [lvl2_node] + descendants, lvl2_node.subtree + # Leaves assertions + assert_equal lvl2_node.leaves, [lvl2_node] end end end