Skip to Content Skip to Search

Action View Dependency Tracker

When the digestor builds a template’s dependency tree (to compute the cache keys used by cache blocks and stale? checks), it asks the dependency tracker which other templates a given template renders.

Dependencies are tracked per template handler, because every template language spells render differently. Action View ships ERBTracker for ERB; handlers for other template languages register their own with ::register_tracker, typically from an +ActiveSupport.on_load(:action_view)+ block so it runs once Action View is available:

ActiveSupport.on_load(:action_view) do
  ActionView::Template.register_template_handler :mtl, MyTemplateLanguage::Handler
  ActionView::DependencyTracker.register_tracker :mtl, MyTemplateLanguage::DependencyTracker
end

Languages whose render calls look like Ruby’s can register ERBTracker instead of writing their own tracker.

Namespace
Methods
R

Class Public methods

register_tracker(extension, tracker)

Registers the tracker used to find the dependencies of templates rendered by the handler registered for extension.

tracker is any object that responds to +call(name, template, view_paths)+ and returns the array of template names template depends on. An object responding only to +call(name, template)+ is also accepted for backwards compatibility.

# File actionview/lib/action_view/dependency_tracker.rb, line 50
def self.register_tracker(extension, tracker)
  handler = Template.handler_for_extension(extension)
  if tracker.respond_to?(:supports_view_paths?)
    @trackers[handler] = tracker
  else
    @trackers[handler] = lambda { |name, template, _|
      tracker.call(name, template)
    }
  end
end