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]
This commit is contained in:
parent
e281641e51
commit
4dfdc7eb90
|
@ -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.
|
Please check [6-0-stable](https://github.com/rails/rails/blob/6-0-stable/activesupport/CHANGELOG.md) for previous changes.
|
||||||
|
|
|
@ -75,7 +75,7 @@ class String
|
||||||
length_with_room_for_omission
|
length_with_room_for_omission
|
||||||
end
|
end
|
||||||
|
|
||||||
"#{self[0, stop]}#{omission}"
|
+"#{self[0, stop]}#{omission}"
|
||||||
end
|
end
|
||||||
|
|
||||||
# Truncates +text+ to at most <tt>bytesize</tt> bytes in length without
|
# Truncates +text+ to at most <tt>bytesize</tt> bytes in length without
|
||||||
|
|
|
@ -291,6 +291,11 @@ class StringInflectionsTest < ActiveSupport::TestCase
|
||||||
assert_equal "Hello Big[...]", "Hello Big World!".truncate(15, omission: "[...]", separator: /\s/)
|
assert_equal "Hello Big[...]", "Hello Big World!".truncate(15, omission: "[...]", separator: /\s/)
|
||||||
end
|
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
|
def test_truncate_bytes
|
||||||
assert_equal "👍👍👍👍", "👍👍👍👍".truncate_bytes(16)
|
assert_equal "👍👍👍👍", "👍👍👍👍".truncate_bytes(16)
|
||||||
assert_equal "👍👍👍👍", "👍👍👍👍".truncate_bytes(16, omission: nil)
|
assert_equal "👍👍👍👍", "👍👍👍👍".truncate_bytes(16, omission: nil)
|
||||||
|
|
Loading…
Reference in New Issue