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