Class: ActionView::DependencyTracker
| Relationships & Source Files | |
| Namespace Children | |
|
Classes:
| |
| Super Chains via Extension / Inclusion / Inheritance | |
|
Class Chain:
|
|
| Inherits: | Object |
| Defined in: | actionview/lib/action_view/dependency_tracker.rb, actionview/lib/action_view/dependency_tracker/erb_tracker.rb, actionview/lib/action_view/dependency_tracker/ruby_tracker.rb, actionview/lib/action_view/dependency_tracker/wildcard_resolver.rb |
Overview
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 Method Summary
-
.register_tracker(extension, tracker)
Registers the
trackerused to find the dependencies of templates rendered by the handler registered forextension. - .find_dependencies(name, template, view_paths = nil) Internal use only
- .remove_tracker(handler) Internal use only
::ActiveSupport::Autoload - Extended
Class Method Details
.find_dependencies(name, template, view_paths = nil)
# File 'actionview/lib/action_view/dependency_tracker.rb', line 36
def self.find_dependencies(name, template, view_paths = nil) # :nodoc: tracker = @trackers[template.handler] return [] unless tracker tracker.call(name, template, view_paths) end
.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
.remove_tracker(handler)
# File 'actionview/lib/action_view/dependency_tracker.rb', line 61
def self.remove_tracker(handler) # :nodoc: @trackers.delete(handler) end