Skip to content

Commit 74320b9

Browse files
authored
Merge pull request rails#55165 from Edouard-chin/ec-action-view-tracker
Prevent Action View digestor from tracking random "render":
2 parents ab756d9 + 5d43fcc commit 74320b9

File tree

2 files changed

+24
-1
lines changed

2 files changed

+24
-1
lines changed

actionview/lib/action_view/dependency_tracker/erb_tracker.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,7 @@ def directory
9191

9292
def render_dependencies
9393
dependencies = []
94-
render_calls = source.split(/\brender\b/).drop(1)
94+
render_calls = source.scan(/<%(?:(?:(?!<%).)*?\brender\b((?:(?!%>).)*?))%>/m).flatten
9595

9696
render_calls.each do |arguments|
9797
add_dependencies(dependencies, arguments, LAYOUT_DEPENDENCY)

actionview/test/template/dependency_tracker_test.rb

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -118,6 +118,29 @@ def test_finds_no_dependency_when_render_ends_the_name_of_another_method
118118
assert_equal [], tracker.dependencies
119119
end
120120

121+
def test_finds_no_dependency_when_render_is_not_a_ruby_call
122+
template = FakeTemplate.new("<div class='render foo'>", :erb)
123+
tracker = make_tracker("resources/_resource", template)
124+
125+
assert_equal [], tracker.dependencies
126+
end
127+
128+
def test_find_dependencies_and_respect_erb_tag_boundaries
129+
template = FakeTemplate.new("<p>Hello</p> <% link_to abc %> <%= render 'single/quote' %>", :erb)
130+
tracker = make_tracker("resources/_resource", template)
131+
132+
assert_equal ["single/quote"], tracker.dependencies
133+
end
134+
135+
def test_find_all_dependencies_and_respect_erb_tag_boundaries
136+
template = FakeTemplate.new("<p>Hello</p> <%=
137+
render object: @all_posts,
138+
partial: 'posts' %> <% link_to abc %> <%= render 'single/quote' %>", :erb)
139+
tracker = make_tracker("resources/_resource", template)
140+
141+
assert_equal ["resources/posts", "single/quote"], tracker.dependencies
142+
end
143+
121144
def test_finds_dependency_on_multiline_render_calls
122145
template = FakeTemplate.new("<%=
123146
render object: @all_posts,

0 commit comments

Comments
 (0)