aboutsummaryrefslogtreecommitdiffstats
path: root/actionpack/lib/action_view/helpers
diff options
context:
space:
mode:
authorFabrizio Regini <freegenie@gmail.com>2012-11-29 16:16:18 +0100
committerFabrizio Regini <freegenie@gmail.com>2012-12-05 14:58:38 +0100
commit6b014a4580a8f17ebb73b441e029c0bb7d34a8c5 (patch)
treea9f295db53729358accbeb047fe1d0be55e87060 /actionpack/lib/action_view/helpers
parente905639af2fe947ff7e1e2331e9216032dff8b3e (diff)
downloadrails-6b014a4580a8f17ebb73b441e029c0bb7d34a8c5.tar.gz
rails-6b014a4580a8f17ebb73b441e029c0bb7d34a8c5.tar.bz2
rails-6b014a4580a8f17ebb73b441e029c0bb7d34a8c5.zip
Allow fragment cache to accept :if and :unless options
[Stephen Ausman + Fabrizio Regini]
Diffstat (limited to 'actionpack/lib/action_view/helpers')
-rw-r--r--actionpack/lib/action_view/helpers/cache_helper.rb14
1 files changed, 13 insertions, 1 deletions
diff --git a/actionpack/lib/action_view/helpers/cache_helper.rb b/actionpack/lib/action_view/helpers/cache_helper.rb
index db920ae7a4..8693f4f0e4 100644
--- a/actionpack/lib/action_view/helpers/cache_helper.rb
+++ b/actionpack/lib/action_view/helpers/cache_helper.rb
@@ -110,8 +110,15 @@ module ActionView
# <%= some_helper_method(person) %>
#
# Now all you'll have to do is change that timestamp when the helper method changes.
+ #
+ # ==== Conditional caching
+ #
+ # You can pass :if and :unless options, to conditionally perform or skip the cache.
+ #
+ # <%= cache @model, if: some_condition(@model) do %>
+ #
def cache(name = {}, options = nil, &block)
- if controller.perform_caching
+ if controller.perform_caching && conditions_match?(options)
safe_concat(fragment_for(cache_fragment_name(name, options), options, &block))
else
yield
@@ -136,6 +143,11 @@ module ActionView
end
private
+
+ def conditions_match?(options)
+ !(options && (!options.fetch(:if, true) || options.fetch(:unless, false)))
+ end
+
def fragment_name_with_digest(name) #:nodoc:
if @virtual_path
[