class String
Extensions to the String
class
Public Instance Methods
strip_heredoc()
click to toggle source
Strips indentation in heredocs
Examples
if options[:usage] puts <<-USAGE.strip_heredoc This command does such and such. Supported options are: -h This message ... USAGE end
The user would see the usage message aligned against the left margin.
Technically, it looks for the least indented line in the whole string, and removes that amount of leading whitespace.
# File lib/core_ext/string.rb, line 21 def strip_heredoc indent = scan(/^[ \t]*(?=\S)/).min.size || 0 gsub(/^[ \t]{#{indent}}/, '') end
truncate(truncate_at, options = {})
click to toggle source
Truncates a given text
after a given length
if text
is longer than length
:
'Once upon a time in a world far far away'.truncate(27) # => "Once upon a time in a wo..."
Pass a string or regexp :separator
to truncate text
at a natural break:
'Once upon a time in a world far far away'.truncate(27, separator: ' ') # => "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..."
The last characters will be replaced with the :omission
string (defaults to “…”) for a total length not exceeding length
:
'And they found that many people were sleeping better.'.truncate(25, omission: '... (continued)') # => "And they f... (continued)"
# File lib/core_ext/string.rb, line 67 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
truncate_at_start(truncate_at, options = {})
click to toggle source
Strips out the first characters in a string
Examples
"averylonstring".truncate_at_start(6, omission: '...') # => '...ing'
Returns the new string
# File lib/core_ext/string.rb, line 35 def truncate_at_start(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 "#{omission}#{reverse[0, stop].reverse}" end