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:
commit
b656134450
2 changed files with 36 additions and 3 deletions
|
@ -133,6 +133,8 @@ module ActionController #:nodoc:
|
|||
end
|
||||
|
||||
def filter(controller)
|
||||
cache_layout = @cache_layout.respond_to?(:call) ? @cache_layout.call(controller) : @cache_layout
|
||||
|
||||
path_options = if @cache_path.respond_to?(:call)
|
||||
controller.instance_exec(controller, &@cache_path)
|
||||
else
|
||||
|
@ -144,13 +146,13 @@ module ActionController #:nodoc:
|
|||
body = controller.read_fragment(cache_path.path, @store_options)
|
||||
|
||||
unless body
|
||||
controller.action_has_layout = false unless @cache_layout
|
||||
controller.action_has_layout = false unless cache_layout
|
||||
yield
|
||||
controller.action_has_layout = true
|
||||
body = controller._save_fragment(cache_path.path, @store_options)
|
||||
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.content_type = Mime[cache_path.extension || :html]
|
||||
|
|
|
@ -236,6 +236,7 @@ class ActionCachingTestController < CachingController
|
|||
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 :with_layout_proc_param, :layout => Proc.new { |c| c.params[:layout] }
|
||||
caches_action :record_not_found, :four_oh_four, :simple_runtime_error
|
||||
caches_action :streaming
|
||||
|
||||
|
@ -282,6 +283,7 @@ class ActionCachingTestController < CachingController
|
|||
alias_method :edit, :index
|
||||
alias_method :destroy, :index
|
||||
alias_method :layout_false, :with_layout
|
||||
alias_method :with_layout_proc_param, :with_layout
|
||||
|
||||
def expire
|
||||
expire_action :controller => 'action_caching_test', :action => 'index'
|
||||
|
@ -403,11 +405,40 @@ class ActionCacheTest < ActionController::TestCase
|
|||
get :layout_false
|
||||
assert_response :success
|
||||
assert_not_equal cached_time, @response.body
|
||||
|
||||
body = body_to_string(read_fragment('hostname.com/action_caching_test/layout_false'))
|
||||
assert_equal cached_time, body
|
||||
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
|
||||
@request.env['HTTP_ACCEPT'] = 'application/json'
|
||||
get :index
|
||||
|
|
Loading…
Reference in a new issue