Permalink
Browse files

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.
  • Loading branch information...
1 parent 4b2cb4a commit 2a576dd257647871660c3e86f0c4fcddbb5b7105 @latortuga latortuga committed Jun 4, 2013
@@ -74,7 +74,7 @@ def render_dependencies
# 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}" }.
@@ -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 @@ def test_returns_empty_array_if_no_tracker_is_found
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
+

0 comments on commit 2a576dd

Please sign in to comment.