mirror of
https://github.com/github/rails.git
synced 2026-04-26 03:00:59 -04:00
Merge pull request #2219 from kommen/fix_fragment_caching_squashed
Fix fragment caching (squashed commits)
This commit is contained in:
committed by
Jeremy Kemper
parent
74fbbf1ea0
commit
8f11d53506
@@ -54,7 +54,7 @@ module ActionView
|
||||
output_safe = output_buffer.html_safe?
|
||||
fragment = output_buffer.slice!(pos..-1)
|
||||
if output_safe
|
||||
self.output_buffer = output_buffer.html_safe
|
||||
self.output_buffer = output_buffer.class.new(output_buffer)
|
||||
end
|
||||
controller.write_fragment(name, fragment, options)
|
||||
end
|
||||
|
||||
@@ -745,6 +745,7 @@ class FunctionalFragmentCachingTest < ActionController::TestCase
|
||||
expected_body = <<-CACHED
|
||||
Hello
|
||||
This bit's fragment cached
|
||||
Ciao
|
||||
CACHED
|
||||
assert_equal expected_body, @response.body
|
||||
|
||||
@@ -786,3 +787,51 @@ CACHED
|
||||
assert_equal " <p>Builder</p>\n", @store.read('views/test.host/functional_caching/formatted_fragment_cached')
|
||||
end
|
||||
end
|
||||
|
||||
class CacheHelperOutputBufferTest < ActionController::TestCase
|
||||
|
||||
class MockController
|
||||
def read_fragment(name, options)
|
||||
return false
|
||||
end
|
||||
|
||||
def write_fragment(name, fragment, options)
|
||||
fragment
|
||||
end
|
||||
end
|
||||
|
||||
def setup
|
||||
super
|
||||
end
|
||||
|
||||
def test_output_buffer
|
||||
output_buffer = ActionView::OutputBuffer.new
|
||||
controller = MockController.new
|
||||
cache_helper = Object.new
|
||||
cache_helper.extend(ActionView::Helpers::CacheHelper)
|
||||
cache_helper.expects(:controller).returns(controller).at_least(0)
|
||||
cache_helper.expects(:output_buffer).returns(output_buffer).at_least(0)
|
||||
# if the output_buffer is changed, the new one should be html_safe and of the same type
|
||||
cache_helper.expects(:output_buffer=).with(responds_with(:html_safe?, true)).with(instance_of(output_buffer.class)).at_least(0)
|
||||
|
||||
assert_nothing_raised do
|
||||
cache_helper.send :fragment_for, 'Test fragment name', 'Test fragment', &Proc.new{ nil }
|
||||
end
|
||||
end
|
||||
|
||||
def test_safe_buffer
|
||||
output_buffer = ActiveSupport::SafeBuffer.new
|
||||
controller = MockController.new
|
||||
cache_helper = Object.new
|
||||
cache_helper.extend(ActionView::Helpers::CacheHelper)
|
||||
cache_helper.expects(:controller).returns(controller).at_least(0)
|
||||
cache_helper.expects(:output_buffer).returns(output_buffer).at_least(0)
|
||||
# if the output_buffer is changed, the new one should be html_safe and of the same type
|
||||
cache_helper.expects(:output_buffer=).with(responds_with(:html_safe?, true)).with(instance_of(output_buffer.class)).at_least(0)
|
||||
|
||||
assert_nothing_raised do
|
||||
cache_helper.send :fragment_for, 'Test fragment name', 'Test fragment', &Proc.new{ nil }
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
@@ -1,2 +1,3 @@
|
||||
Hello
|
||||
<%= cache do %>This bit's fragment cached<% end %>
|
||||
<%= 'Ciao' %>
|
||||
|
||||
Reference in New Issue
Block a user