aboutsummaryrefslogtreecommitdiffstats
path: root/actionpack/lib
diff options
context:
space:
mode:
authorArthur Neves <arthurnn@gmail.com>2015-01-07 21:23:55 -0500
committerArthur Neves <arthurnn@gmail.com>2015-02-15 11:36:36 -0500
commit2ed39424dbecf1d040b15d1450f0265b35b78022 (patch)
tree1e0c42ea20762de430409ec589fa9e6d2a45ae92 /actionpack/lib
parent62133326df3c7edff67a2e57ae32c95bf6e8a818 (diff)
downloadrails-2ed39424dbecf1d040b15d1450f0265b35b78022.tar.gz
rails-2ed39424dbecf1d040b15d1450f0265b35b78022.tar.bz2
rails-2ed39424dbecf1d040b15d1450f0265b35b78022.zip
Implement http_cache_forever to ActionController
Add http_cache_forever to ActionController, so we can cache results forever. Things like static pages are a good candidate for this type of caching. This cache only controls caching headers, so it is up to the browser to cache those requests.
Diffstat (limited to 'actionpack/lib')
-rw-r--r--actionpack/lib/action_controller/metal/conditional_get.rb18
1 files changed, 18 insertions, 0 deletions
diff --git a/actionpack/lib/action_controller/metal/conditional_get.rb b/actionpack/lib/action_controller/metal/conditional_get.rb
index 28f0b6e349..bc6d336e19 100644
--- a/actionpack/lib/action_controller/metal/conditional_get.rb
+++ b/actionpack/lib/action_controller/metal/conditional_get.rb
@@ -215,6 +215,24 @@ module ActionController
response.cache_control.replace(:no_cache => true)
end
+ # Cache or yield the block. The cache is suppose to never expire.
+ #
+ # You can use this method when you have a HTTP response that never changes,
+ # and the browser and proxies should cache it indefinitely.
+ #
+ # <tt>public</tt> By default, HTTP responses are private, cached only on the
+ # user's web browser. To allow proxies to cache the response, set +true+ to
+ # indicate that they can serve the cached response to all users.
+ #
+ # <tt>version</tt> is the version passed as a key for the cache.
+ def http_cache_forever(public: false, version: 'v1')
+ expires_in 100.years, public: public
+
+ yield if stale?(etag: "#{version}-#{request.fullpath}",
+ last_modified: Time.parse('2011-01-01').utc,
+ public: public)
+ end
+
private
def combine_etags(options)
etags = etaggers.map { |etagger| instance_exec(options, &etagger) }.compact