instance method
truncate_bytes
Ruby on Rails edge
Since v6.0.6.1Signature
truncate_bytes(truncate_to, omission: "…")
Truncates text to at most truncate_to 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 `truncate_to`.
Raises `ArgumentError` when the bytesize of `:omission` exceeds `truncate_to`.
: (Integer, ?omission: String?) -> String
Parameters
-
truncate_toreq -
omissionkey = "…"
Source
# File activesupport/lib/active_support/core_ext/string/filters.rb, line 133
def truncate_bytes(truncate_to, omission: "…")
omission ||= ""
case
when bytesize <= truncate_to
dup
when omission.bytesize > truncate_to
raise ArgumentError, "Omission #{omission.inspect} is #{omission.bytesize}, larger than the truncation length of #{truncate_to} bytes"
when omission.bytesize == truncate_to
omission.dup
else
self.class.new.force_encoding(encoding).tap do |cut|
cut_at = truncate_to - 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 133
· View on GitHub
· Improve this page
· Find usages on GitHub
Defined in String