Class: MptTree::Node

Inherits:
ActiveRecord::Base
  • Object
show all
Defined in:
app/models/mpt_tree/node.rb

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.root_created?(tree_type) ⇒ Boolean

Returns:

  • (Boolean)


38
39
40
# File 'app/models/mpt_tree/node.rb', line 38

def self.root_created?(tree_type)
  !Node.where(:tree_type=>tree_type).empty?
end

Instance Method Details

#ancestorsObject



20
21
22
# File 'app/models/mpt_tree/node.rb', line 20

def ancestors
  Node.where(:tree_type=>tree_type).where("lft < ? AND rgt > ?", self.lft, self.rgt).order('lft').map(&:tree_id)
end

#insert(node) ⇒ Object



8
9
10
11
12
13
14
# File 'app/models/mpt_tree/node.rb', line 8

def insert(node)
  Node.transaction do
    Node.where(:tree_type=>tree_type).where("rgt >= :rgt", :rgt=>self.rgt).update_all("rgt=rgt+2")
    Node.where(:tree_type=>tree_type).where("lft > :rgt", :rgt=>self.rgt).update_all("lft=lft+2")
    node.create_mpt_tree_node(:lft => self.rgt, :rgt=>self.rgt+1)
  end
end

#leaf?Boolean

Returns:

  • (Boolean)


24
25
26
# File 'app/models/mpt_tree/node.rb', line 24

def leaf?
  self.rgt == self.lft+1
end

#level(parent = nil) ⇒ Object



28
29
30
31
32
33
34
35
36
# File 'app/models/mpt_tree/node.rb', line 28

def level(parent=nil)
  sql = "lft < :self_lft AND rgt > :self_rgt "
  arguments = {:self_lft=>self.lft, :self_rgt=>self.rgt}
  if parent
    sql+= "AND lft >= :parent_lft AND rgt <= :parent_rgt"  
    arguments[:parent_lft]=parent.mpt_tree_node.lft; arguments[:parent_rgt]=parent.mpt_tree_node.rgt;
  end
  Node.where(:tree_type=>tree_type).where(sql, arguments).count(:id)
end

#treeObject



16
17
18
# File 'app/models/mpt_tree/node.rb', line 16

def tree
  Node.where(:tree_type=>tree_type).where("lft > ? AND rgt < ?", self.lft, self.rgt ).order('lft').map(&:tree_id)
end