Class: String

Inherits:
Object
  • Object
show all
Defined in:
lib/core_ext/string.rb

Overview

Extensions to the String class

Instance Method Summary collapse

Instance Method Details

#strip_heredocObject

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.



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, 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 = {}) ⇒ 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, 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