diff options
author | Jordan Thomas <mail@jordanthomas.me> | 2019-04-26 13:29:41 -0400 |
---|---|---|
committer | Rafael França <rafaelmfranca@gmail.com> | 2019-04-26 13:29:41 -0400 |
commit | 4dfdc7eb90be905e0e8e583f942091ce12381b37 (patch) | |
tree | a002b4d2d55961e379a9cb92a5637937bd0b1d76 | |
parent | e281641e51c8ad9d9bc962d9b89bc9119c1ec8fb (diff) | |
download | rails-4dfdc7eb90be905e0e8e583f942091ce12381b37.tar.gz rails-4dfdc7eb90be905e0e8e583f942091ce12381b37.tar.bz2 rails-4dfdc7eb90be905e0e8e583f942091ce12381b37.zip |
Frozen truncate (#36109)
* Add test asserting truncate returns unfrozen string
* Ensure strings returned from truncate are not frozen
This fixes an issue where strings too short to be truncated were
returned unfrozen, where as long-enough strings were returned
frozen. Now retuned strings will not be frozen whether or not
the string returned was shortened.
* Update changelog w/ new truncate behavior description
[Jordan Thomas + Rafael Mendonça França]
-rw-r--r-- | activesupport/CHANGELOG.md | 19 | ||||
-rw-r--r-- | activesupport/lib/active_support/core_ext/string/filters.rb | 2 | ||||
-rw-r--r-- | activesupport/test/core_ext/string_ext_test.rb | 5 |
3 files changed, 25 insertions, 1 deletions
diff --git a/activesupport/CHANGELOG.md b/activesupport/CHANGELOG.md index d1b3b31646..ccdf2c3040 100644 --- a/activesupport/CHANGELOG.md +++ b/activesupport/CHANGELOG.md @@ -1,3 +1,22 @@ +* `truncate` would return the original string if it was too short to be truncated + and a frozen string if it were long enough to be truncated. Now truncate will + consistently return an unfrozen string regardless. This behavior is consistent + with `gsub` and `strip`. + Before: + + 'foobar'.truncate(5).frozen? + => true + 'foobar'.truncate(6).frozen? + => false + + After: + + 'foobar'.truncate(5).frozen? + => false + 'foobar'.truncate(6).frozen? + => false + + *Jordan Thomas* Please check [6-0-stable](https://github.com/rails/rails/blob/6-0-stable/activesupport/CHANGELOG.md) for previous changes. diff --git a/activesupport/lib/active_support/core_ext/string/filters.rb b/activesupport/lib/active_support/core_ext/string/filters.rb index df0e79afa8..7f28bd52f2 100644 --- a/activesupport/lib/active_support/core_ext/string/filters.rb +++ b/activesupport/lib/active_support/core_ext/string/filters.rb @@ -75,7 +75,7 @@ class String length_with_room_for_omission end - "#{self[0, stop]}#{omission}" + +"#{self[0, stop]}#{omission}" end # Truncates +text+ to at most <tt>bytesize</tt> bytes in length without diff --git a/activesupport/test/core_ext/string_ext_test.rb b/activesupport/test/core_ext/string_ext_test.rb index 4ffa33aa61..c5a000b67a 100644 --- a/activesupport/test/core_ext/string_ext_test.rb +++ b/activesupport/test/core_ext/string_ext_test.rb @@ -291,6 +291,11 @@ class StringInflectionsTest < ActiveSupport::TestCase assert_equal "Hello Big[...]", "Hello Big World!".truncate(15, omission: "[...]", separator: /\s/) end + def test_truncate_returns_frozen_string + assert_not "Hello World!".truncate(12).frozen? + assert_not "Hello World!!".truncate(12).frozen? + end + def test_truncate_bytes assert_equal "ππππ", "ππππ".truncate_bytes(16) assert_equal "ππππ", "ππππ".truncate_bytes(16, omission: nil) |