From 1879a338655aba393726de1fc5ba0d8cb4cb26d5 Mon Sep 17 00:00:00 2001 From: Daniel Schierbeck Date: Sun, 16 Dec 2012 23:38:46 +0100 Subject: Allow registering custom dependency trackers --- actionpack/lib/action_view/dependency_tracker.rb | 15 ++++++++- .../test/template/dependency_tracker_test.rb | 38 ++++++++++++++++++++++ actionpack/test/template/digestor_test.rb | 3 +- 3 files changed, 54 insertions(+), 2 deletions(-) create mode 100644 actionpack/test/template/dependency_tracker_test.rb (limited to 'actionpack') diff --git a/actionpack/lib/action_view/dependency_tracker.rb b/actionpack/lib/action_view/dependency_tracker.rb index 1e31185c26..946a8f0fd1 100644 --- a/actionpack/lib/action_view/dependency_tracker.rb +++ b/actionpack/lib/action_view/dependency_tracker.rb @@ -1,7 +1,18 @@ module ActionView class DependencyTracker + @trackers = Hash.new + def self.find_dependencies(name, template) - ErbTracker.call(name, template) + handler = template.handler + @trackers.fetch(handler).call(name, template) + end + + def self.register_tracker(handler, tracker) + @trackers[handler] = tracker + end + + def self.remove_tracker(handler) + @trackers.delete(handler) end class ErbTracker @@ -62,5 +73,7 @@ module ActionView template.source.scan(EXPLICIT_DEPENDENCY).flatten.uniq end end + + register_tracker Template::Handlers::ERB, ErbTracker end end diff --git a/actionpack/test/template/dependency_tracker_test.rb b/actionpack/test/template/dependency_tracker_test.rb new file mode 100644 index 0000000000..5b2ec0eb2d --- /dev/null +++ b/actionpack/test/template/dependency_tracker_test.rb @@ -0,0 +1,38 @@ +require 'abstract_unit' +require 'action_view/dependency_tracker' + +class DependencyTrackerTest < ActionView::TestCase + Neckbeard = Class.new + + class NeckbeardTracker + def self.call(name, template) + ["foo/#{name}"] + end + end + + class FakeTemplate + attr_reader :source, :handler + + def initialize(source) + @source, @handler = source, Neckbeard + end + end + + def tracker + ActionView::DependencyTracker + end + + def setup + tracker.register_tracker(Neckbeard, NeckbeardTracker) + end + + def teardown + tracker.remove_tracker(Neckbeard) + end + + def test_finds_tracker_by_template_handler + template = FakeTemplate.new("boo/hoo") + dependencies = tracker.find_dependencies("boo/hoo", template) + assert_equal ["foo/boo/hoo"], dependencies + end +end diff --git a/actionpack/test/template/digestor_test.rb b/actionpack/test/template/digestor_test.rb index 849e2981a6..272ffec26e 100644 --- a/actionpack/test/template/digestor_test.rb +++ b/actionpack/test/template/digestor_test.rb @@ -2,10 +2,11 @@ require 'abstract_unit' require 'fileutils' class FixtureTemplate - attr_reader :source + attr_reader :source, :handler def initialize(template_path) @source = File.read(template_path) + @handler = ActionView::Template::Handlers::ERB rescue Errno::ENOENT raise ActionView::MissingTemplate.new([], "", [], true, []) end -- cgit v1.2.3