Module: ActsAsManyTrees::InstanceMethods
- Extended by:
- ActiveSupport::Concern
- Defined in:
- lib/acts_as_many_trees/base.rb
Instance Method Summary collapse
- #add_child(new_child, tree_name = self.default_tree_name) ⇒ Object
- #ancestors(tree_name = self.default_tree_name) ⇒ Object
- #children(tree_name = self.default_tree_name) ⇒ Object
-
#default_tree_name ⇒ Object
can be over-ridden in the instance.
- #descendants(tree_name = self.default_tree_name) ⇒ Object
- #next_sibling ⇒ Object
- #parent(tree_name = self.default_tree_name) ⇒ Object
- #parent=(inpt_parent) ⇒ Object
- #position(tree_name = self.default_tree_name) ⇒ Object
- #previous_sibling ⇒ Object
- #self_and_ancestors(tree_name = self.default_tree_name) ⇒ Object
- #self_and_descendants(tree_name = self.default_tree_name) ⇒ Object
- #set_parent(new_parent:, tree_name: self.default_tree_name, existing_tree: self.default_tree_name, clone_sub_tree: false) ⇒ Object
- #siblings ⇒ Object
Instance Method Details
#add_child(new_child, tree_name = self.default_tree_name) ⇒ Object
108 109 110 |
# 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) ⇒ Object
124 125 126 |
# 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) ⇒ Object
116 117 118 |
# 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 ⇒ Object
can be over-ridden in the instance
83 84 85 |
# File 'lib/acts_as_many_trees/base.rb', line 83 def default_tree_name '' end |
#descendants(tree_name = self.default_tree_name) ⇒ Object
144 145 146 |
# 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 ⇒ Object
140 141 142 |
# File 'lib/acts_as_many_trees/base.rb', line 140 def next_sibling siblings_after.first end |
#parent(tree_name = self.default_tree_name) ⇒ Object
112 113 114 |
# 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) ⇒ Object
87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 |
# 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) ⇒ Object
148 149 150 151 |
# 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 ⇒ Object
136 137 138 |
# 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) ⇒ Object
120 121 122 |
# 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) ⇒ Object
128 129 130 |
# 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) ⇒ Object
104 105 106 |
# 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 ⇒ Object
132 133 134 |
# File 'lib/acts_as_many_trees/base.rb', line 132 def siblings self_and_siblings.where.not(id: id) end |