diff options
author | Xavier Noria <fxn@hashref.com> | 2012-02-17 05:16:58 -0800 |
---|---|---|
committer | Xavier Noria <fxn@hashref.com> | 2012-02-17 05:18:37 -0800 |
commit | ce51edb73bce5e213568fd5a362fb3557a06aee1 (patch) | |
tree | 49491604277566acfc2a5af59adf679415c76da9 /actionpack | |
parent | 4bb6ed7744c482dad6b71cffc19a0c86b730b730 (diff) | |
download | rails-ce51edb73bce5e213568fd5a362fb3557a06aee1.tar.gz rails-ce51edb73bce5e213568fd5a362fb3557a06aee1.tar.bz2 rails-ce51edb73bce5e213568fd5a362fb3557a06aee1.zip |
let expires_in accept a must_revalidate flag
Diffstat (limited to 'actionpack')
-rw-r--r-- | actionpack/CHANGELOG.md | 3 | ||||
-rw-r--r-- | actionpack/lib/action_controller/metal/conditional_get.rb | 8 | ||||
-rw-r--r-- | actionpack/test/controller/render_test.rb | 20 |
3 files changed, 29 insertions, 2 deletions
diff --git a/actionpack/CHANGELOG.md b/actionpack/CHANGELOG.md index 459f5b90e4..ec53efa6b7 100644 --- a/actionpack/CHANGELOG.md +++ b/actionpack/CHANGELOG.md @@ -1,5 +1,8 @@ ## Rails 4.0.0 (unreleased) ## +* `expires_in` accepts a `must_revalidate` flag. If true, "must-revalidate" + is added to the Cache-Control header. *fxn* + * Add `date_field` and `date_field_tag` helpers which render an `input[type="date"]` tag *Olek Janiszewski* * Adds `image_url`, `javascript_url`, `stylesheet_url`, `audio_url`, `video_url`, and `font_url` diff --git a/actionpack/lib/action_controller/metal/conditional_get.rb b/actionpack/lib/action_controller/metal/conditional_get.rb index 1645400693..41758d99e8 100644 --- a/actionpack/lib/action_controller/metal/conditional_get.rb +++ b/actionpack/lib/action_controller/metal/conditional_get.rb @@ -110,13 +110,17 @@ module ActionController # # Examples: # expires_in 20.minutes - # expires_in 3.hours, :public => true + # expires_in 3.hours, :public => true, :must_revalidate => true # expires_in 3.hours, 'max-stale' => 5.hours, :public => true # # This method will overwrite an existing Cache-Control header. # See http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html for more possibilities. def expires_in(seconds, options = {}) #:doc: - response.cache_control.merge!(:max_age => seconds, :public => options.delete(:public)) + response.cache_control.merge!( + :max_age => seconds, + :public => options.delete(:public), + :must_revalidate => options.delete(:must_revalidate) + ) options.delete(:private) response.cache_control[:extras] = options.map {|k,v| "#{k}=#{v}"} diff --git a/actionpack/test/controller/render_test.rb b/actionpack/test/controller/render_test.rb index fef9fbb175..c384d7c80d 100644 --- a/actionpack/test/controller/render_test.rb +++ b/actionpack/test/controller/render_test.rb @@ -91,6 +91,16 @@ class TestController < ActionController::Base render :action => 'hello_world' end + def conditional_hello_with_expires_in_with_must_revalidate + expires_in 1.minute, :must_revalidate => true + render :action => 'hello_world' + end + + def conditional_hello_with_expires_in_with_public_and_must_revalidate + expires_in 1.minute, :public => true, :must_revalidate => true + render :action => 'hello_world' + end + def conditional_hello_with_expires_in_with_public_with_more_keys expires_in 1.minute, :public => true, 'max-stale' => 5.hours render :action => 'hello_world' @@ -1399,6 +1409,16 @@ class ExpiresInRenderTest < ActionController::TestCase assert_equal "max-age=60, public", @response.headers["Cache-Control"] end + def test_expires_in_header_with_must_revalidate + get :conditional_hello_with_expires_in_with_must_revalidate + assert_equal "max-age=60, private, must-revalidate", @response.headers["Cache-Control"] + end + + def test_expires_in_header_with_public_and_must_revalidate + get :conditional_hello_with_expires_in_with_public_and_must_revalidate + assert_equal "max-age=60, public, must-revalidate", @response.headers["Cache-Control"] + end + def test_expires_in_header_with_additional_headers get :conditional_hello_with_expires_in_with_public_with_more_keys assert_equal "max-age=60, public, max-stale=18000", @response.headers["Cache-Control"] |