From 065908a4c59f949c49abb97a9483ef16d02ec329 Mon Sep 17 00:00:00 2001 From: Marcel Molina Date: Thu, 12 Oct 2006 23:29:04 +0000 Subject: [PATCH] Make page caching respect the format of the resource that is being requested even if the current route is the default route so that, e.g. posts.rss is not transformed by url_for to '/' and subsequently cached as '/index.html' when it should be cached as '/posts.rss'. git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@5289 5ecf4fe2-1ee6-0310-87b1-e25e094e27de --- actionpack/CHANGELOG | 2 ++ actionpack/lib/action_controller/caching.rb | 6 +++--- ...action_caching_test.rb => caching_test.rb} | 21 +++++++++++++++++++ 3 files changed, 26 insertions(+), 3 deletions(-) rename actionpack/test/controller/{action_caching_test.rb => caching_test.rb} (82%) diff --git a/actionpack/CHANGELOG b/actionpack/CHANGELOG index 190a5578c8..f099513766 100644 --- a/actionpack/CHANGELOG +++ b/actionpack/CHANGELOG @@ -1,5 +1,7 @@ *SVN* +* Make page caching respect the format of the resource that is being requested even if the current route is the default route so that, e.g. posts.rss is not transformed by url_for to '/' and subsequently cached as '/index.html' when it should be cached as '/posts.rss'. [Marcel Molina Jr.] + * Use String#chars in TextHelper::excerpt. Closes #6386 [Manfred Stienstra] * Install named routes into ActionView::Base instead of proxying them to the view via helper_method. Closes #5932. [Nicholas Seckar] diff --git a/actionpack/lib/action_controller/caching.rb b/actionpack/lib/action_controller/caching.rb index 926535da03..a91a2198a6 100644 --- a/actionpack/lib/action_controller/caching.rb +++ b/actionpack/lib/action_controller/caching.rb @@ -118,10 +118,10 @@ def expire_page(options = {}) return unless perform_caching if options[:action].is_a?(Array) options[:action].dup.each do |action| - self.class.expire_page(url_for(options.merge({ :only_path => true, :skip_relative_url_root => true, :action => action }))) + self.class.expire_page(url_for(options.merge(:only_path => true, :skip_relative_url_root => true, :action => action))) end else - self.class.expire_page(url_for(options.merge({ :only_path => true, :skip_relative_url_root => true }))) + self.class.expire_page(url_for(options.merge(:only_path => true, :skip_relative_url_root => true))) end end @@ -130,7 +130,7 @@ def expire_page(options = {}) # cache_page "I'm the cached content", :controller => "lists", :action => "show" def cache_page(content = nil, options = {}) return unless perform_caching && caching_allowed - self.class.cache_page(content || response.body, url_for(options.merge({ :only_path => true, :skip_relative_url_root => true }))) + self.class.cache_page(content || response.body, url_for(options.merge(:only_path => true, :skip_relative_url_root => true, :format => params[:format]))) end private diff --git a/actionpack/test/controller/action_caching_test.rb b/actionpack/test/controller/caching_test.rb similarity index 82% rename from actionpack/test/controller/action_caching_test.rb rename to actionpack/test/controller/caching_test.rb index 21c11ed417..1935cf5aa5 100644 --- a/actionpack/test/controller/action_caching_test.rb +++ b/actionpack/test/controller/caching_test.rb @@ -7,6 +7,27 @@ ActionController::Base.perform_caching = true ActionController::Base.fragment_cache_store = :file_store, FILE_STORE_PATH +class PageCachingTest < Test::Unit::TestCase + def setup + ActionController::Routing::Routes.draw do |map| + map.main '', :controller => 'posts' + map.resources :posts + map.connect ':controller/:action/:id' + end + + @request = ActionController::TestRequest.new + @params = {:controller => 'posts', :action => 'index', :only_path => true, :skip_relative_url_root => true} + @rewriter = ActionController::UrlRewriter.new(@request, @params) + end + + def test_page_caching_resources_saves_to_correct_path_with_extension_even_if_default_route + @params[:format] = 'rss' + assert_equal '/posts.rss', @rewriter.rewrite(@params) + @params[:format] = nil + assert_equal '/', @rewriter.rewrite(@params) + end +end + class ActionCachingTestController < ActionController::Base caches_action :index -- GitLab