aboutsummaryrefslogtreecommitdiffstats
path: root/actionpack/lib/action_controller/caching/fragments.rb
diff options
context:
space:
mode:
Diffstat (limited to 'actionpack/lib/action_controller/caching/fragments.rb')
-rw-r--r--actionpack/lib/action_controller/caching/fragments.rb16
1 files changed, 11 insertions, 5 deletions
diff --git a/actionpack/lib/action_controller/caching/fragments.rb b/actionpack/lib/action_controller/caching/fragments.rb
index 89787727bd..a07fe2b255 100644
--- a/actionpack/lib/action_controller/caching/fragments.rb
+++ b/actionpack/lib/action_controller/caching/fragments.rb
@@ -34,17 +34,23 @@ module ActionController #:nodoc:
ActiveSupport::Cache.expand_cache_key(key.is_a?(Hash) ? url_for(key).split("://").last : key, :views)
end
- def fragment_for(buffer, name = {}, options = nil, &block) #:nodoc:
+ def fragment_for(name = {}, options = nil, &block) #:nodoc:
if perform_caching
if fragment_exist?(name, options)
- buffer.safe_concat(read_fragment(name, options))
+ read_fragment(name, options)
else
+ # VIEW TODO: Make #capture usable outside of ERB
+ # This dance is needed because Builder can't use capture
+ buffer = view_context.output_buffer
pos = buffer.length
- block.call
- write_fragment(name, buffer[pos..-1], options)
+ yield
+ fragment = buffer[pos..-1]
+ write_fragment(name, fragment, options)
+ ActionView::NonConcattingString.new(fragment)
end
else
- block.call
+ ret = yield
+ ActiveSupport::SafeBuffer.new(ret) if ret.is_a?(String)
end
end