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 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