Sha256: 4a5ae63c8f2f6dbfe167aadecd821c83275a89b9395d2cf68501a3b2c7b5ec28

Contents?: true

Size: 1.9 KB

Versions: 37

Compression:

Stored size: 1.9 KB

Contents

class String
  # Returns the string, first removing all whitespace on both ends of
  # the string, and then changing remaining consecutive whitespace
  # groups into one space each.
  #
  # Note that it handles both ASCII and Unicode whitespace like mongolian vowel separator (U+180E).
  #
  #   %{ Multi-line
  #      string }.squish                   # => "Multi-line string"
  #   " foo   bar    \n   \t   boo".squish # => "foo bar boo"
  def squish
    dup.squish!
  end

  # Performs a destructive squish. See String#squish.
  def squish!
    gsub!(/\A[[:space:]]+/, '')
    gsub!(/[[:space:]]+\z/, '')
    gsub!(/[[:space:]]+/, ' ')
    self
  end

  # Truncates a given +text+ after a given <tt>length</tt> if +text+ is longer than <tt>length</tt>:
  #
  #   'Once upon a time in a world far far away'.truncate(27)
  #   # => "Once upon a time in a wo..."
  #
  # Pass a string or regexp <tt>:separator</tt> 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 <tt>:omission</tt> string (defaults to "...")
  # for a total length not exceeding <tt>length</tt>:
  #
  #   'And they found that many people were sleeping better.'.truncate(25, omission: '... (continued)')
  #   # => "And they f... (continued)"
  def truncate(truncate_at, options = {})
    return dup unless length > truncate_at

    options[:omission] ||= '...'
    length_with_room_for_omission = truncate_at - options[: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]}#{options[:omission]}"
  end
end

Version data entries

37 entries across 37 versions & 3 rubygems

Version Path
activesupport-4.0.11.1 lib/active_support/core_ext/string/filters.rb
activesupport-4.0.12 lib/active_support/core_ext/string/filters.rb
activesupport-4.0.11 lib/active_support/core_ext/string/filters.rb
activesupport-4.0.10 lib/active_support/core_ext/string/filters.rb
activesupport-4.0.10.rc2 lib/active_support/core_ext/string/filters.rb
activesupport-4.0.10.rc1 lib/active_support/core_ext/string/filters.rb
activesupport-4.0.9 lib/active_support/core_ext/string/filters.rb
activesupport-4.0.8 lib/active_support/core_ext/string/filters.rb
activesupport-4.0.7 lib/active_support/core_ext/string/filters.rb
activesupport-4.0.6 lib/active_support/core_ext/string/filters.rb
activesupport-4.0.6.rc3 lib/active_support/core_ext/string/filters.rb
activesupport-4.0.6.rc2 lib/active_support/core_ext/string/filters.rb
activesupport-4.0.6.rc1 lib/active_support/core_ext/string/filters.rb
activesupport-4.0.5 lib/active_support/core_ext/string/filters.rb
droiuby-0.3.6 lib/droiuby/support/string/filters.rb
droiuby-0.3.5 lib/droiuby/support/string/filters.rb
droiuby-0.3.4 lib/droiuby/support/string/filters.rb
droiuby-0.3.3 lib/droiuby/support/string/filters.rb
droiuby-0.3.2 lib/droiuby/support/string/filters.rb
droiuby-0.3.1 lib/droiuby/support/string/filters.rb