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.
Class Public methods
register_tracker(extension, tracker) Link
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