module ActsAsTree::TreeWalker

def walk_tree_dfs(where = {}, node = nil, level = -1, &block)

def walk_tree_dfs(where = {}, node = nil, level = -1, &block)
  yield(node, level) unless level == -1
  nodes = (node.nil? ? roots : node.children).where(where)
  nodes.each { |child| walk_tree_dfs where, child, level + 1, &block }
end