mirror of
https://github.com/rails/rails.git
synced 2022-11-09 12:12:34 -05:00
Ensure that the format isn't applied twice to the cache key, else it becomes impossible to target with expire_action.
This commit is contained in:
parent
1afe269a4a
commit
6cbe4223a7
2 changed files with 14 additions and 1 deletions
|
@ -175,7 +175,7 @@ module ActionController #:nodoc:
|
|||
private
|
||||
def normalize!(path)
|
||||
path << 'index' if path[-1] == ?/
|
||||
path << ".#{extension}" if extension and !path.ends_with?(extension)
|
||||
path << ".#{extension}" if extension and !path.split('?').first.try(:ends_with?, ".#{extension}")
|
||||
URI.parser.unescape(path)
|
||||
end
|
||||
end
|
||||
|
|
|
@ -194,6 +194,7 @@ class ActionCachingTestController < CachingController
|
|||
caches_action :show, :cache_path => 'http://test.host/custom/show'
|
||||
caches_action :edit, :cache_path => Proc.new { |c| c.params[:id] ? "http://test.host/#{c.params[:id]};edit" : "http://test.host/edit" }
|
||||
caches_action :with_layout
|
||||
caches_action :with_format_and_http_param, :cache_path => Proc.new { |c| { :key => 'value' } }
|
||||
caches_action :layout_false, :layout => false
|
||||
caches_action :record_not_found, :four_oh_four, :simple_runtime_error
|
||||
|
||||
|
@ -219,6 +220,11 @@ class ActionCachingTestController < CachingController
|
|||
render :text => @cache_this, :layout => true
|
||||
end
|
||||
|
||||
def with_format_and_http_param
|
||||
@cache_this = MockTime.now.to_f.to_s
|
||||
render :text => @cache_this
|
||||
end
|
||||
|
||||
def record_not_found
|
||||
raise ActiveRecord::RecordNotFound, "oops!"
|
||||
end
|
||||
|
@ -359,6 +365,13 @@ class ActionCacheTest < ActionController::TestCase
|
|||
assert !fragment_exist?('hostname.com/action_caching_test')
|
||||
end
|
||||
|
||||
def test_action_cache_with_format_and_http_param
|
||||
get :with_format_and_http_param, :format => 'json'
|
||||
assert_response :success
|
||||
assert !fragment_exist?('hostname.com/action_caching_test/with_format_and_http_param.json?key=value.json')
|
||||
assert fragment_exist?('hostname.com/action_caching_test/with_format_and_http_param.json?key=value')
|
||||
end
|
||||
|
||||
def test_action_cache_with_store_options
|
||||
MockTime.expects(:now).returns(12345).once
|
||||
@controller.expects(:read_fragment).with('hostname.com/action_caching_test', :expires_in => 1.hour).once
|
||||
|
|
Loading…
Reference in a new issue