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
|
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]
|
||||||
|
|
|
@ -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
|
||||||
|
|
Loading…
Reference in a new issue