diff options
author | r7kamura <r7kamura@gmail.com> | 2019-04-18 17:44:22 +0900 |
---|---|---|
committer | r7kamura <r7kamura@gmail.com> | 2019-04-19 06:32:55 +0900 |
commit | 9dd254c2a20b393d68c9db4b17a15a672e2a2c16 (patch) | |
tree | ce7a58117e7bd4936ea2c1993eb9b1f085796ac9 | |
parent | 98a75b46468c45d4477949ed267bb8823297d815 (diff) | |
download | rails-9dd254c2a20b393d68c9db4b17a15a672e2a2c16.tar.gz rails-9dd254c2a20b393d68c9db4b17a15a672e2a2c16.tar.bz2 rails-9dd254c2a20b393d68c9db4b17a15a672e2a2c16.zip |
Preserve html_safe? status on ActiveSupport::SafeBuffer#*
-rw-r--r-- | activesupport/CHANGELOG.md | 12 | ||||
-rw-r--r-- | activesupport/lib/active_support/core_ext/string/output_safety.rb | 6 | ||||
-rw-r--r-- | activesupport/test/safe_buffer_test.rb | 8 |
3 files changed, 26 insertions, 0 deletions
diff --git a/activesupport/CHANGELOG.md b/activesupport/CHANGELOG.md index 597e7b8929..301b0c8822 100644 --- a/activesupport/CHANGELOG.md +++ b/activesupport/CHANGELOG.md @@ -1,3 +1,15 @@ +* Preserve `html_safe?` status on `ActiveSupport::SafeBuffer#*`. + + Before: + + ("<br />".html_safe * 2).html_safe? #=> nil + + After: + + ("<br />".html_safe * 2).html_safe? #=> true + + *Ryo Nakamura* + * Calling test methods with `with_info_handler` method to allow minitest-hooks plugin to work. diff --git a/activesupport/lib/active_support/core_ext/string/output_safety.rb b/activesupport/lib/active_support/core_ext/string/output_safety.rb index 638152626b..645b1fea17 100644 --- a/activesupport/lib/active_support/core_ext/string/output_safety.rb +++ b/activesupport/lib/active_support/core_ext/string/output_safety.rb @@ -213,6 +213,12 @@ module ActiveSupport #:nodoc: dup.concat(other) end + def *(*) + new_safe_buffer = super + new_safe_buffer.instance_variable_set(:@html_safe, @html_safe) + new_safe_buffer + end + def %(args) case args when Hash diff --git a/activesupport/test/safe_buffer_test.rb b/activesupport/test/safe_buffer_test.rb index b1a1c2d390..f475e05c9a 100644 --- a/activesupport/test/safe_buffer_test.rb +++ b/activesupport/test/safe_buffer_test.rb @@ -150,6 +150,14 @@ class SafeBufferTest < ActiveSupport::TestCase assert_equal "hello<>", clean + @buffer end + test "Should preserve html_safe? status on multiplication" do + multiplied_safe_buffer = "<br />".html_safe * 2 + assert_predicate multiplied_safe_buffer, :html_safe? + + multiplied_unsafe_buffer = @buffer.gsub("", "<>") * 2 + assert_not_predicate multiplied_unsafe_buffer, :html_safe? + end + test "Should concat as a normal string when safe" do clean = "hello".html_safe @buffer.gsub!("", "<>") |