Permalink
Browse files

JavaScriptGenerator should only sets output_buffer for the duration o…

…f the update block
  • Loading branch information...
jeremy committed Jul 16, 2008
1 parent fbef982 commit ecc054352512cac8c0895c78c5f3d043046dcfec
@@ -122,14 +122,15 @@ def content_for(name, content = nil, &block)
nil
end
- private
- def with_output_buffer(buf = '')
- self.output_buffer, old_buffer = buf, output_buffer
- yield
- output_buffer
- ensure
- self.output_buffer = old_buffer
- end
+ # Use an alternate output buffer for the duration of the block.
+ # Defaults to a new empty string.
+ def with_output_buffer(buf = '') #:nodoc:
+ self.output_buffer, old_buffer = buf, output_buffer
+ yield
+ output_buffer
+ ensure
+ self.output_buffer = old_buffer
+ end
end
end
end
@@ -580,9 +580,10 @@ def observe_form(form_id, options = {})
class JavaScriptGenerator #:nodoc:
def initialize(context, &block) #:nodoc:
@context, @lines = context, []
- @context.output_buffer = @lines if @context
include_helpers_from_context
- @context.instance_exec(self, &block)
+ @context.with_output_buffer(@lines) do
+ @context.instance_exec(self, &block)
+ end
end
private
@@ -3,7 +3,11 @@
class JavaScriptHelperTest < ActionView::TestCase
tests ActionView::Helpers::JavaScriptHelper
- attr_accessor :output_buffer
+ attr_accessor :template_format, :output_buffer
+
+ def setup
+ @template = self
+ end
def test_escape_javascript
assert_equal '', escape_javascript(nil)
@@ -28,7 +28,7 @@ class PrototypeHelperBaseTest < ActionView::TestCase
attr_accessor :template_format, :output_buffer
def setup
- @template = nil
+ @template = self
@controller = Class.new do
def url_for(options)
if options.is_a?(String)
@@ -243,8 +243,12 @@ def test_observe_field_without_frequency
end
def test_update_page
+ old_output_buffer = output_buffer
+
block = Proc.new { |page| page.replace_html('foo', 'bar') }
assert_equal create_generator(&block).to_s, update_page(&block)
+
+ assert_equal old_output_buffer, output_buffer
end
def test_update_page_tag

0 comments on commit ecc0543

Please sign in to comment.