1
0
Fork 0
mirror of https://github.com/rails/rails.git synced 2022-11-09 12:12:34 -05:00

Merge pull request #6125 from ncri/master

Adding proc evaluation for action caching layout parameter
This commit is contained in:
José Valim 2012-05-02 13:40:16 -07:00
commit b656134450
2 changed files with 36 additions and 3 deletions

View file

@ -133,6 +133,8 @@ module ActionController #:nodoc:
end end
def filter(controller) def filter(controller)
cache_layout = @cache_layout.respond_to?(:call) ? @cache_layout.call(controller) : @cache_layout
path_options = if @cache_path.respond_to?(:call) path_options = if @cache_path.respond_to?(:call)
controller.instance_exec(controller, &@cache_path) controller.instance_exec(controller, &@cache_path)
else else
@ -144,13 +146,13 @@ module ActionController #:nodoc:
body = controller.read_fragment(cache_path.path, @store_options) body = controller.read_fragment(cache_path.path, @store_options)
unless body unless body
controller.action_has_layout = false unless @cache_layout controller.action_has_layout = false unless cache_layout
yield yield
controller.action_has_layout = true controller.action_has_layout = true
body = controller._save_fragment(cache_path.path, @store_options) body = controller._save_fragment(cache_path.path, @store_options)
end end
body = controller.render_to_string(:text => body, :layout => true) unless @cache_layout body = controller.render_to_string(:text => body, :layout => true) unless cache_layout
controller.response_body = body controller.response_body = body
controller.content_type = Mime[cache_path.extension || :html] controller.content_type = Mime[cache_path.extension || :html]

View file

@ -236,6 +236,7 @@ class ActionCachingTestController < CachingController
caches_action :with_layout caches_action :with_layout
caches_action :with_format_and_http_param, :cache_path => Proc.new { |c| { :key => 'value' } } caches_action :with_format_and_http_param, :cache_path => Proc.new { |c| { :key => 'value' } }
caches_action :layout_false, :layout => false caches_action :layout_false, :layout => false
caches_action :with_layout_proc_param, :layout => Proc.new { |c| c.params[:layout] }
caches_action :record_not_found, :four_oh_four, :simple_runtime_error caches_action :record_not_found, :four_oh_four, :simple_runtime_error
caches_action :streaming caches_action :streaming
@ -282,6 +283,7 @@ class ActionCachingTestController < CachingController
alias_method :edit, :index alias_method :edit, :index
alias_method :destroy, :index alias_method :destroy, :index
alias_method :layout_false, :with_layout alias_method :layout_false, :with_layout
alias_method :with_layout_proc_param, :with_layout
def expire def expire
expire_action :controller => 'action_caching_test', :action => 'index' expire_action :controller => 'action_caching_test', :action => 'index'
@ -403,11 +405,40 @@ class ActionCacheTest < ActionController::TestCase
get :layout_false get :layout_false
assert_response :success assert_response :success
assert_not_equal cached_time, @response.body assert_not_equal cached_time, @response.body
body = body_to_string(read_fragment('hostname.com/action_caching_test/layout_false')) body = body_to_string(read_fragment('hostname.com/action_caching_test/layout_false'))
assert_equal cached_time, body assert_equal cached_time, body
end end
def test_action_cache_with_layout_and_layout_cache_false_via_proc
get :with_layout_proc_param, :layout => false
assert_response :success
cached_time = content_to_cache
assert_not_equal cached_time, @response.body
assert fragment_exist?('hostname.com/action_caching_test/with_layout_proc_param')
reset!
get :with_layout_proc_param, :layout => false
assert_response :success
assert_not_equal cached_time, @response.body
body = body_to_string(read_fragment('hostname.com/action_caching_test/with_layout_proc_param'))
assert_equal cached_time, body
end
def test_action_cache_with_layout_and_layout_cache_true_via_proc
get :with_layout_proc_param, :layout => true
assert_response :success
cached_time = content_to_cache
assert_not_equal cached_time, @response.body
assert fragment_exist?('hostname.com/action_caching_test/with_layout_proc_param')
reset!
get :with_layout_proc_param, :layout => true
assert_response :success
assert_not_equal cached_time, @response.body
body = body_to_string(read_fragment('hostname.com/action_caching_test/with_layout_proc_param'))
assert_equal @response.body, body
end
def test_action_cache_conditional_options def test_action_cache_conditional_options
@request.env['HTTP_ACCEPT'] = 'application/json' @request.env['HTTP_ACCEPT'] = 'application/json'
get :index get :index