module MptTree
Constants
- VERSION
Public Class Methods
root()
click to toggle source
# File lib/mpt_tree.rb, line 37 def self.root name.constantize.first end
Public Instance Methods
acts_as_tree()
click to toggle source
# File lib/mpt_tree.rb, line 5 def acts_as_tree has_one :mpt_tree_node, :as=>:tree, :dependent=>:destroy, :class_name=>"MptTree::Node" default_scope lambda {joins(:mpt_tree_node).order('mpt_tree_nodes.lft')} class_eval do def make_it_root create_mpt_tree_node #unless MptTree::Node.root_created? self.class.name self.reload end def tree node_ids = mpt_tree_node.tree self.class.name.constantize.where(:id => node_ids) end def insert(node) raise "can not be inserted! node already have parent." if node.mpt_tree_node mpt_tree_node.insert(node) end def parent ancestors.last end def siblings parent.nodes_at_level(level(parent)) - [self] end def children nodes_at_level(1) end def self.root name.constantize.first end def root? (level(self.class.name.constantize.first) == 0) ? true : false end def leaf? !children.present? end def ancestors node_ids = mpt_tree_node.ancestors self.class.name.constantize.where(:id => node_ids) end def self_with_ancestors ancestors << self end def level(parent=nil) mpt_tree_node.level(parent) end def nodes_at_level(level) nodes = Array.new tree.each do |node| nodes << node if node.level(self) == level end nodes end def change_parent(node) mpt_tree_node.destroy self.reload node.insert(self) end alias_method :<<, :insert end end
ancestors()
click to toggle source
# File lib/mpt_tree.rb, line 49 def ancestors node_ids = mpt_tree_node.ancestors self.class.name.constantize.where(:id => node_ids) end
change_parent(node)
click to toggle source
# File lib/mpt_tree.rb, line 70 def change_parent(node) mpt_tree_node.destroy self.reload node.insert(self) end
children()
click to toggle source
# File lib/mpt_tree.rb, line 33 def children nodes_at_level(1) end
insert(node)
click to toggle source
# File lib/mpt_tree.rb, line 20 def insert(node) raise "can not be inserted! node already have parent." if node.mpt_tree_node mpt_tree_node.insert(node) end
leaf?()
click to toggle source
# File lib/mpt_tree.rb, line 45 def leaf? !children.present? end
level(parent=nil)
click to toggle source
# File lib/mpt_tree.rb, line 58 def level(parent=nil) mpt_tree_node.level(parent) end
make_it_root()
click to toggle source
# File lib/mpt_tree.rb, line 10 def make_it_root create_mpt_tree_node #unless MptTree::Node.root_created? self.class.name self.reload end
nodes_at_level(level)
click to toggle source
# File lib/mpt_tree.rb, line 62 def nodes_at_level(level) nodes = Array.new tree.each do |node| nodes << node if node.level(self) == level end nodes end
parent()
click to toggle source
# File lib/mpt_tree.rb, line 25 def parent ancestors.last end
root?()
click to toggle source
# File lib/mpt_tree.rb, line 41 def root? (level(self.class.name.constantize.first) == 0) ? true : false end
self_with_ancestors()
click to toggle source
# File lib/mpt_tree.rb, line 54 def self_with_ancestors ancestors << self end
siblings()
click to toggle source
# File lib/mpt_tree.rb, line 29 def siblings parent.nodes_at_level(level(parent)) - [self] end
tree()
click to toggle source
# File lib/mpt_tree.rb, line 15 def tree node_ids = mpt_tree_node.tree self.class.name.constantize.where(:id => node_ids) end