module ActsAsManyTrees::InstanceMethods
Public Instance Methods
add_child(new_child,tree_name=self.default_tree_name)
click to toggle source
# File lib/acts_as_many_trees/base.rb, line 108 def add_child(new_child,tree_name=self.default_tree_name) hierarchy_class.set_parent_of(item:new_child,new_parent:self,hierarchy_scope:tree_name) end
ancestors(tree_name=self.default_tree_name)
click to toggle source
# File lib/acts_as_many_trees/base.rb, line 124 def ancestors(tree_name=self.default_tree_name) self_and_ancestors(tree_name).not_this(self.id) end
children(tree_name=self.default_tree_name)
click to toggle source
# File lib/acts_as_many_trees/base.rb, line 116 def children(tree_name=self.default_tree_name) descendants(tree_name).where('generation=1') end
default_tree_name()
click to toggle source
can be over-ridden in the instance
# File lib/acts_as_many_trees/base.rb, line 83 def default_tree_name '' end
descendants(tree_name=self.default_tree_name)
click to toggle source
# File lib/acts_as_many_trees/base.rb, line 144 def descendants(tree_name=self.default_tree_name) self_and_descendants(tree_name).not_this(self.id) end
next_sibling()
click to toggle source
# File lib/acts_as_many_trees/base.rb, line 140 def next_sibling siblings_after.first end
parent(tree_name=self.default_tree_name)
click to toggle source
# File lib/acts_as_many_trees/base.rb, line 112 def parent(tree_name=self.default_tree_name) ancestors(tree_name).where('generation=1').first end
parent=(inpt_parent)
click to toggle source
# File lib/acts_as_many_trees/base.rb, line 87 def parent=(inpt_parent) if inpt_parent.is_a?(Hash) new_parent=inpt_parent[:new_parent] after_node=inpt_parent[:after_node] before_node=inpt_parent[:before_node] tree_name = inpt_parent[:tree_name] || (new_parent ? new_parent.default_tree_name : self.default_tree_name) existing_tree_name = inpt_parent[:existing_tree_name] || self.default_tree_name else new_parent=inpt_parent after_node=inpt_parent.children.ordered.last unless inpt_parent.nil? before_node=inpt_parent.next_sibling unless inpt_parent.nil? tree_name = inpt_parent ? inpt_parent.default_tree_name : self.default_tree_name existing_tree_name = self.default_tree_name end hierarchy_class.set_parent_of(item:self,new_parent:new_parent,hierarchy_scope:tree_name,existing_scope:existing_tree_name,after_node:after_node,before_node:before_node) end
position(tree_name=self.default_tree_name)
click to toggle source
# File lib/acts_as_many_trees/base.rb, line 148 def position(tree_name=self.default_tree_name) link = unscoped_ancestor_links.where(ancestor_id: id,hierarchy_scope: tree_name).first link ? link.position: 0 end
previous_sibling()
click to toggle source
# File lib/acts_as_many_trees/base.rb, line 136 def previous_sibling siblings_before.last end
self_and_ancestors(tree_name=self.default_tree_name)
click to toggle source
# File lib/acts_as_many_trees/base.rb, line 120 def self_and_ancestors(tree_name=self.default_tree_name) unscoped_ancestors.merge(hierarchy_class.scope_hierarchy(tree_name)) end
self_and_descendants(tree_name=self.default_tree_name)
click to toggle source
# File lib/acts_as_many_trees/base.rb, line 128 def self_and_descendants(tree_name=self.default_tree_name) unscoped_descendants.merge(hierarchy_class.scope_hierarchy(tree_name)) end
set_parent(new_parent:,tree_name:self.default_tree_name,existing_tree:self.default_tree_name,clone_sub_tree:false)
click to toggle source
# File lib/acts_as_many_trees/base.rb, line 104 def set_parent(new_parent:,tree_name:self.default_tree_name,existing_tree:self.default_tree_name,clone_sub_tree:false) hierarchy_class.set_parent_of(item:self,new_parent:new_parent,hierarchy_scope:tree_name,existing_scope:existing_tree,clone_sub_tree:clone_sub_tree) end
siblings()
click to toggle source
# File lib/acts_as_many_trees/base.rb, line 132 def siblings self_and_siblings.where.not(id: id) end