class CollectiveIdea::Acts::NestedSet::Tree

Attributes

indices[RW]
model[R]
validate_nodes[R]

Public Class Methods

new(model, validate_nodes) click to toggle source
   # File lib/awesome_nested_set/tree.rb
12 def initialize(model, validate_nodes)
13   @model = model
14   @validate_nodes = validate_nodes
15   @indices = {}
16 end

Public Instance Methods

rebuild!() click to toggle source
   # File lib/awesome_nested_set/tree.rb
18 def rebuild!
19   # Don't rebuild a valid tree.
20   return true if model.valid?
21 
22   root_nodes.each do |root_node|
23     # setup index for this scope
24     indices[scope_for_rebuild.call(root_node)] ||= 0
25     set_left_and_rights(root_node)
26     reset_counter_cache(root_node)
27   end
28 end

Private Instance Methods

increment_indice!(node) click to toggle source
   # File lib/awesome_nested_set/tree.rb
32 def increment_indice!(node)
33   indices[scope_for_rebuild.call(node)] += 1
34 end
node_children(node) click to toggle source
   # File lib/awesome_nested_set/tree.rb
45 def node_children(node)
46   model.where(["#{quoted_parent_column_full_name} = ? #{scope_for_rebuild.call(node)}", node.primary_id]).
47         order(order_for_rebuild)
48 end
reset_counter_cache(node) click to toggle source
   # File lib/awesome_nested_set/tree.rb
62 def reset_counter_cache(node)
63   return unless counter_cache_column_name
64   node.class.reset_counters(node.id, :children)
65 
66   node.children.each do |child|
67     reset_counter_cache(child)
68   end
69 end
root_nodes() click to toggle source
   # File lib/awesome_nested_set/tree.rb
50 def root_nodes
51   model.where("#{quoted_parent_column_full_name} IS NULL").order(order_for_rebuild)
52 end
set_left!(node) click to toggle source
   # File lib/awesome_nested_set/tree.rb
54 def set_left!(node)
55   node[left_column_name] = increment_indice!(node)
56 end
set_left_and_rights(node) click to toggle source
   # File lib/awesome_nested_set/tree.rb
36 def set_left_and_rights(node)
37   set_left!(node)
38   # find
39   node_children(node).each { |n| set_left_and_rights(n) }
40   set_right!(node)
41 
42   node.save!(:validate => validate_nodes)
43 end
set_right!(node) click to toggle source
   # File lib/awesome_nested_set/tree.rb
58 def set_right!(node)
59   node[right_column_name] = increment_indice!(node)
60 end