instance method
truncate_bytes
Ruby on Rails 7.0.10
Since v6.0.6Signature
truncate_bytes(truncate_at, omission: "…")
Truncates text to at most bytesize bytes in length without breaking string encoding by splitting multibyte characters or breaking grapheme clusters (“perceptual characters”) by truncating at combining characters.
>> "🔪🔪🔪🔪🔪🔪🔪🔪🔪🔪🔪🔪🔪🔪🔪🔪🔪🔪🔪🔪".size => 20 >> "🔪🔪🔪🔪🔪🔪🔪🔪🔪🔪🔪🔪🔪🔪🔪🔪🔪🔪🔪🔪".bytesize => 80 >> "🔪🔪🔪🔪🔪🔪🔪🔪🔪🔪🔪🔪🔪🔪🔪🔪🔪🔪🔪🔪".truncate_bytes(20) => "🔪🔪🔪🔪…"
The truncated text ends with the :omission string, defaulting to “…”, for a total length not exceeding bytesize.
Parameters
-
truncate_atreq -
omissionkey = "…"
Source
# File activesupport/lib/active_support/core_ext/string/filters.rb, line 95
def truncate_bytes(truncate_at, omission: "…")
omission ||= ""
case
when bytesize <= truncate_at
dup
when omission.bytesize > truncate_at
raise ArgumentError, "Omission #{omission.inspect} is #{omission.bytesize}, larger than the truncation length of #{truncate_at} bytes"
when omission.bytesize == truncate_at
omission.dup
else
self.class.new.tap do |cut|
cut_at = truncate_at - omission.bytesize
each_grapheme_cluster do |grapheme|
if cut.bytesize + grapheme.bytesize <= cut_at
cut << grapheme
else
break
end
end
cut << omission
end
end
end
Defined in activesupport/lib/active_support/core_ext/string/filters.rb line 95
· View on GitHub
· Improve this page
· Find usages on GitHub
Defined in String