# File lib/ancestry/class_methods.rb, line 44 def arrange_nodes(nodes) # Get all nodes ordered by ancestry and start sorting them into an empty hash nodes.inject(ActiveSupport::OrderedHash.new) do |arranged_nodes, node| # Find the insertion point for that node by going through its ancestors node.ancestor_ids.inject(arranged_nodes) do |insertion_point, ancestor_id| insertion_point.each do |parent, children| # Change the insertion point to children if node is a descendant of this parent insertion_point = children if ancestor_id == parent.id end insertion_point end[node] = ActiveSupport::OrderedHash.new arranged_nodes end end