Class: MptTree::Node
- Inherits:
-
ActiveRecord::Base
- Object
- ActiveRecord::Base
- MptTree::Node
- Defined in:
- app/models/mpt_tree/node.rb
Class Method Summary collapse
Instance Method Summary collapse
- #ancestors ⇒ Object
- #insert(node) ⇒ Object
- #leaf? ⇒ Boolean
- #level(parent = nil) ⇒ Object
- #tree ⇒ Object
Class Method Details
.root_created?(tree_type) ⇒ 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
#ancestors ⇒ Object
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
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 |
#tree ⇒ Object
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 |