提交 c2fe0938 编写于 作者: C Carsten Zimmermann

Re-enable capture'ing non-String values

This has been discussed in #17661 and partially reverts the changes made
in 9de83050 and 986cac73

The test case added to content_for acts as a regression / acceptance test.
上级 ef99d4cd
Please check [4-2-stable](https://github.com/rails/rails/blob/4-2-stable/actionview/CHANGELOG.md) for previous changes.
* Restore old behaviour for `capture` to return value as is when passed non-String values.
Fixes #17661.
*Carsten Zimmermann*
......@@ -36,7 +36,7 @@ module CaptureHelper
def capture(*args)
value = nil
buffer = with_output_buffer { value = yield(*args) }
if string = buffer.presence || value and string.is_a?(String)
if string = buffer.presence || value
ERB::Util.html_escape string
end
end
......
......@@ -24,8 +24,8 @@ def test_capture_captures_the_value_returned_by_the_block_if_the_temporary_buffe
assert_equal 'foobar', string
end
def test_capture_returns_nil_if_the_returned_value_is_not_a_string
assert_nil @av.capture { 1 }
def test_capture_returns_value_even_if_the_returned_value_is_not_a_string
assert_equal '1', @av.capture { 1 }
end
def test_capture_escapes_html
......
......@@ -64,6 +64,11 @@ def test_content_tag_with_block_and_options_outside_out_of_erb
content_tag("a", "href" => "create") { "Create" }
end
def test_content_tag_with_block_and_non_string_outside_out_of_erb
assert_equal content_tag("p", "1.0", nil, false),
content_tag("p") { 1.0 }
end
def test_content_tag_nested_in_content_tag_out_of_erb
assert_equal content_tag("p", content_tag("b", "Hello")),
content_tag("p") { content_tag("b", "Hello") },
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册