class String
def truncate(truncate_at, options = {})
'And they found that many people were sleeping better.'.truncate(25, omission: '... (continued)')
for a total length not exceeding length:
The last characters will be replaced with the :omission string (defaults to "...")
# => "Once upon a time in a..."
'Once upon a time in a world far far away'.truncate(27, separator: /\s/)
# => "Once upon a time in a..."
'Once upon a time in a world far far away'.truncate(27, separator: ' ')
Pass a string or regexp :separator to truncate +text+ at a natural break:
# => "Once upon a time in a wo..."
'Once upon a time in a world far far away'.truncate(27)
Truncates a given +text+ after a given length if +text+ is longer than length:
def truncate(truncate_at, options = {}) return dup unless length > truncate_at omission = options[:omission] || "..." length_with_room_for_omission = truncate_at - omission.length stop = \ if options[:separator] rindex(options[:separator], length_with_room_for_omission) || length_with_room_for_omission else length_with_room_for_omission end +"#{self[0, stop]}#{omission}" end