diff options
author | Drew Ulmer <drew.ulmer@gmail.com> | 2013-06-04 14:39:50 -0500 |
---|---|---|
committer | Drew Ulmer <drew.ulmer@gmail.com> | 2013-06-04 14:39:50 -0500 |
commit | 2a576dd257647871660c3e86f0c4fcddbb5b7105 (patch) | |
tree | feb66ba90076e58dda35f4a1d4987169f5c1952c /actionpack | |
parent | 4b2cb4ac9df5b0c7b98d5d450277b47b8accba9e (diff) | |
download | rails-2a576dd257647871660c3e86f0c4fcddbb5b7105.tar.gz rails-2a576dd257647871660c3e86f0c4fcddbb5b7105.tar.bz2 rails-2a576dd257647871660c3e86f0c4fcddbb5b7105.zip |
Fix mismatching variable names when using an underscore
The ERBTracker template digest helper class was using a regex to match
render calls and it was incorrectly not matching against variables with
underscores in the name. This caused it to use the wrong regex match data
to populate the template dependency. Because underscore is a valid
character for a variable, this fixes the ERBTracker to match it properly.
Diffstat (limited to 'actionpack')
-rw-r--r-- | actionpack/lib/action_view/dependency_tracker.rb | 2 | ||||
-rw-r--r-- | actionpack/test/template/dependency_tracker_test.rb | 54 |
2 files changed, 42 insertions, 14 deletions
diff --git a/actionpack/lib/action_view/dependency_tracker.rb b/actionpack/lib/action_view/dependency_tracker.rb index 45d17be605..b2e8334077 100644 --- a/actionpack/lib/action_view/dependency_tracker.rb +++ b/actionpack/lib/action_view/dependency_tracker.rb @@ -74,7 +74,7 @@ module ActionView # render(@topic) => render("topics/topic") # render(topics) => render("topics/topic") # render(message.topics) => render("topics/topic") - collect { |name| name.sub(/\A@?([a-z]+\.)*([a-z_]+)\z/) { "#{$2.pluralize}/#{$2.singularize}" } }. + collect { |name| name.sub(/\A@?([a-z_]+\.)*([a-z_]+)\z/) { "#{$2.pluralize}/#{$2.singularize}" } }. # render("headline") => render("message/headline") collect { |name| name.include?("/") ? name : "#{directory}/#{name}" }. diff --git a/actionpack/test/template/dependency_tracker_test.rb b/actionpack/test/template/dependency_tracker_test.rb index 9c68afbdbd..8588925de3 100644 --- a/actionpack/test/template/dependency_tracker_test.rb +++ b/actionpack/test/template/dependency_tracker_test.rb @@ -1,24 +1,24 @@ require 'abstract_unit' require 'action_view/dependency_tracker' -class DependencyTrackerTest < ActionView::TestCase - Neckbeard = lambda {|template| template.source } - Bowtie = lambda {|template| template.source } - - class NeckbeardTracker - def self.call(name, template) - ["foo/#{name}"] - end +class NeckbeardTracker + def self.call(name, template) + ["foo/#{name}"] end +end - class FakeTemplate - attr_reader :source, :handler +class FakeTemplate + attr_reader :source, :handler - def initialize(source, handler = Neckbeard) - @source, @handler = source, handler - end + def initialize(source, handler = Neckbeard) + @source, @handler = source, handler end +end + +Neckbeard = lambda {|template| template.source } +Bowtie = lambda {|template| template.source } +class DependencyTrackerTest < ActionView::TestCase def tracker ActionView::DependencyTracker end @@ -44,3 +44,31 @@ class DependencyTrackerTest < ActionView::TestCase assert_equal [], dependencies end end + +class ERBTrackerTest < MiniTest::Unit::TestCase + def make_tracker(name, template) + ActionView::DependencyTracker::ERBTracker.new(name, template) + end + + def test_dependency_of_erb_template_with_number_in_filename + template = FakeTemplate.new("<%# render 'messages/message123' %>", :erb) + tracker = make_tracker('messages/_message123', template) + + assert_equal ["messages/message123"], tracker.dependencies + end + + def test_finds_dependency_in_correct_directory + template = FakeTemplate.new("<%# render(message.topic) %>", :erb) + tracker = make_tracker('messages/_message', template) + + assert_equal ["topics/topic"], tracker.dependencies + end + + def test_finds_dependency_in_correct_directory_with_underscore + template = FakeTemplate.new("<%# render(message_type.messages) %>", :erb) + tracker = make_tracker('message_types/_message_type', template) + + assert_equal ["messages/message"], tracker.dependencies + end +end + |