From 34c9e6c05ed5ed689e12b5b80dc521a9803bd71c Mon Sep 17 00:00:00 2001 From: Drew Ulmer Date: Sat, 1 Dec 2012 21:53:50 -0600 Subject: [PATCH 1/2] Add new test for regex matches outlined in TemmplateDigestor This includes failing test for #17. --- test/render_dependency_matcher_test.rb | 45 ++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100644 test/render_dependency_matcher_test.rb diff --git a/test/render_dependency_matcher_test.rb b/test/render_dependency_matcher_test.rb new file mode 100644 index 0000000..e0af27f --- /dev/null +++ b/test/render_dependency_matcher_test.rb @@ -0,0 +1,45 @@ +require 'cache_digests/test_helper' +require 'fileutils' + +class RenderDependencyMatcherTest < MiniTest::Unit::TestCase + def test_matches_render_partial + assert_matched "render partial: \"comments/comment\", collection: commentable.comments" + end + + def test_matches_render_no_partial_double_quote + assert_matched "render \"comments/comments\"" + end + + def test_matches_render_no_partial_single_quote + assert_matched "render 'comments/comments'" + end + + def test_matches_render_no_partial_single_quote_in_parens + assert_matched "render('comments/comments')" + end + + def test_matches_render_with_instance_var + assert_matched "render(@topic)" + end + + def test_matches_render_with_local_var + assert_matched "render(topics)" + end + + def test_misses_string_rendered + assert_misses "rendered" + end + + private + def matcher + CacheDigests::TemplateDigestor::RENDER_DEPENDENCY + end + + def assert_matched(str) + assert str =~ matcher, "Should have matched #{str} but didn't." + end + + def assert_misses(str) + assert str !~ matcher, "Matched #{str} but should not have." + end +end From 8da24863982897eec90eca81bf792c51ebbd0251 Mon Sep 17 00:00:00 2001 From: Drew Ulmer Date: Sat, 1 Dec 2012 21:55:47 -0600 Subject: [PATCH 2/2] Fix render regex to match calls to render but not the word render This fixes the regex to make sure that usage of the word render in a context other than rendering a partial (e.g. in a comment with the word "rendered") will not erroneously get matched by the digestor. --- lib/cache_digests/template_digestor.rb | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/lib/cache_digests/template_digestor.rb b/lib/cache_digests/template_digestor.rb index 86ea4eb..b209253 100644 --- a/lib/cache_digests/template_digestor.rb +++ b/lib/cache_digests/template_digestor.rb @@ -16,8 +16,8 @@ class TemplateDigestor # render(topics) => render("topics/topic") # render(message.topics) => render("topics/topic") RENDER_DEPENDENCY = / - render\s* # render, followed by optional whitespace - \(? # start an optional parenthesis for the render call + render(?:\s+?| # render, followed by optional whitespace + \() # start an optional parenthesis for the render call (partial:|:partial\s+=>)?\s* # naming the partial, used with collection -- 1st capture ([@a-z"'][@a-z_\/\."']+) # the template name itself -- 2nd capture /x @@ -106,4 +106,4 @@ def explicit_dependencies source.scan(EXPLICIT_DEPENDENCY).flatten.uniq end end -end \ No newline at end of file +end