Method: ActionView::Digestor.tree

Defined in:
actionview/lib/action_view/digestor.rb

.tree(name, finder, partial = false, seen = {}) ⇒ Object

Create a dependency tree for template named name.



43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
# File 'actionview/lib/action_view/digestor.rb', line 43

def tree(name, finder, partial = false, seen = {})
  logical_name = name.gsub(%r|/_|, "/")
  interpolated = name.include?("#")

  path = TemplatePath.parse(name)

  if !interpolated && (template = find_template(finder, path.name, [path.prefix], partial, []))
    if node = seen[template.identifier] # handle cycles in the tree
      node
    else
      node = seen[template.identifier] = Node.create(name, logical_name, template, partial)

      deps = DependencyTracker.find_dependencies(name, template, finder.view_paths)
      deps.uniq { |n| n.gsub(%r|/_|, "/") }.each do |dep_file|
        node.children << tree(dep_file, finder, true, seen)
      end
      node
    end
  else
    unless interpolated # Dynamic template partial names can never be tracked
      logger.error "  Couldn't find template for digesting: #{name}"
    end

    seen[name] ||= Missing.new(name, logical_name, nil)
  end
end