Class: String
- Inherits:
-
Object
- Object
- String
- Defined in:
- lib/core_ext/string.rb
Overview
Extensions to the String class
Instance Method Summary collapse
-
#strip_heredoc ⇒ Object
Strips indentation in heredocs.
-
#truncate(truncate_at, options = {}) ⇒ Object
Truncates a given
text
after a givenlength
iftext
is longer thanlength
:. -
#truncate_at_start(truncate_at, options = {}) ⇒ Object
Strips out the first characters in a string.
Instance Method Details
#strip_heredoc ⇒ Object
Strips indentation in heredocs
Examples
if [: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.
21 22 23 24 |
# 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 = {}) ⇒ Object
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)"
67 68 69 70 71 72 73 74 75 76 77 78 79 80 |
# File 'lib/core_ext/string.rb', line 67 def truncate(truncate_at, = {}) return dup unless length > truncate_at omission = [:omission] || '...' length_with_room_for_omission = truncate_at - omission.length stop = \ if [:separator] rindex([: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 = {}) ⇒ Object
Strips out the first characters in a string
Examples
"averylonstring".truncate_at_start(6, omission: '...')
# => '...ing'
Returns the new string
35 36 37 38 39 40 41 42 43 44 45 46 47 |
# File 'lib/core_ext/string.rb', line 35 def truncate_at_start(truncate_at, = {}) return dup unless length > truncate_at omission = [:omission] || '...' length_with_room_for_omission = truncate_at - omission.length stop = if [:separator] rindex([:separator], length_with_room_for_omission) || length_with_room_for_omission else length_with_room_for_omission end "#{omission}#{reverse[0, stop].reverse}" end |