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, line 12
def initialize(model, validate_nodes)
  @model = model
  @validate_nodes = validate_nodes
  @indices = {}
end

Public Instance Methods

rebuild!() click to toggle source
# File lib/awesome_nested_set/tree.rb, line 18
def rebuild!
  # Don't rebuild a valid tree.
  return true if model.valid?

  root_nodes.each do |root_node|
    # setup index for this scope
    indices[scope_for_rebuild.call(root_node)] ||= 0
    set_left_and_rights(root_node)
  end
end

Private Instance Methods

increment_indice!(node) click to toggle source
# File lib/awesome_nested_set/tree.rb, line 31
def increment_indice!(node)
  indices[scope_for_rebuild.call(node)] += 1
end
node_children(node) click to toggle source
# File lib/awesome_nested_set/tree.rb, line 44
def node_children(node)
  model.where(["#{quoted_parent_column_full_name} = ? #{scope_for_rebuild.call(node)}", node.primary_id]).
        order(order_for_rebuild)
end
root_nodes() click to toggle source
# File lib/awesome_nested_set/tree.rb, line 49
def root_nodes
  model.where("#{quoted_parent_column_full_name} IS NULL").order(order_for_rebuild)
end
set_left!(node) click to toggle source
# File lib/awesome_nested_set/tree.rb, line 53
def set_left!(node)
  node[left_column_name] = increment_indice!(node)
end
set_left_and_rights(node) click to toggle source
# File lib/awesome_nested_set/tree.rb, line 35
def set_left_and_rights(node)
  set_left!(node)
  # find
  node_children(node).each { |n| set_left_and_rights(n) }
  set_right!(node)

  node.save!(:validate => validate_nodes)
end
set_right!(node) click to toggle source
# File lib/awesome_nested_set/tree.rb, line 57
def set_right!(node)
  node[right_column_name] = increment_indice!(node)
end