diff options
Diffstat (limited to 'actionview/lib/action_view/buffers.rb')
-rw-r--r-- | actionview/lib/action_view/buffers.rb | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/actionview/lib/action_view/buffers.rb b/actionview/lib/action_view/buffers.rb new file mode 100644 index 0000000000..361a0dccbe --- /dev/null +++ b/actionview/lib/action_view/buffers.rb @@ -0,0 +1,49 @@ +require 'active_support/core_ext/string/output_safety' + +module ActionView + class OutputBuffer < ActiveSupport::SafeBuffer #:nodoc: + def initialize(*) + super + encode! + end + + def <<(value) + return self if value.nil? + super(value.to_s) + end + alias :append= :<< + + def safe_concat(value) + return self if value.nil? + super(value.to_s) + end + alias :safe_append= :safe_concat + end + + class StreamingBuffer #:nodoc: + def initialize(block) + @block = block + end + + def <<(value) + value = value.to_s + value = ERB::Util.h(value) unless value.html_safe? + @block.call(value) + end + alias :concat :<< + alias :append= :<< + + def safe_concat(value) + @block.call(value.to_s) + end + alias :safe_append= :safe_concat + + def html_safe? + true + end + + def html_safe + self + end + end +end |