Spec-Zone.ru › Ruby on Rails 4.2

класс String

Родитель:
Объект

Строка склонения определяют новые методы в классе Строка, для преобразования имён для разных целей. Например, вы можете определить имя таблицы по имени класса.

'ScaleScore'.tableize # => "scale_scores"

Константы

BLANK_RE

Публичные методы экземпляров

acts_like_string?() Показать исходный код
# File activesupport/lib/active_support/core_ext/string/behavior.rb, line 3
def acts_like_string?
  true
end

Включить более предсказуемую типизацию по умолчанию для классов, похожих на строки. См. Object#acts_like?.

at(position) Показать исходный код
# File activesupport/lib/active_support/core_ext/string/access.rb, line 27
def at(position)
  self[position]
end

Если вы передаете целое число, возвращает подстроку длиной в один символ в указанной позиции. Первый символ строки находится в позиции 0, следующий — в позиции 1 и так далее. Если передается диапазон, возвращается подстрока, содержащая символы в позициях, заданных диапазоном. В обоих случаях, если смещение отрицательное, оно считается с конца строки. Возвращает nil, если начальное смещение выходит за пределы строки. Возвращает пустую строку, если начало диапазона больше конца строки.

str = "hello"
str.at(0)      # => "h"
str.at(1..3)   # => "ell"
str.at(-2)     # => "l"
str.at(-2..-1) # => "lo"
str.at(5)      # => nil
str.at(5..-1)  # => ""

Если передан объект Regexp, возвращается соответствующая часть строки. Если передан объект String, возвращается переданная строка, если она встречается в строке. В обоих случаях возвращается nil, если совпадений нет.

str = "hello"
str.at(/lo/) # => "lo"
str.at(/ol/) # => nil
str.at("lo") # => "lo"
str.at("ol") # => nil
blank?() Показать исходный код
# File activesupport/lib/active_support/core_ext/object/blank.rb, line 115
def blank?
  BLANK_RE === self
end

Строка считается пустой, если она пустая или содержит только пробелы:

''.blank?       # => true
'   '.blank?    # => true
"\t\n\r".blank? # => true
' blah '.blank? # => false

Поддерживаются Unicode-пробелы:

"\u00a0".blank? # => true

@return [true, false]

camelcase(first_letter = :upper)
Псевдоним для: camelize
camelize(first_letter = :upper) Показать исходный код
# File activesupport/lib/active_support/core_ext/string/inflections.rb, line 89
def camelize(first_letter = :upper)
  case first_letter
  when :upper
    ActiveSupport::Inflector.camelize(self, true)
  when :lower
    ActiveSupport::Inflector.camelize(self, false)
  end
end

По умолчанию, camelize преобразует строки в UpperCamelCase. Если аргумент camelize равен :lower, то camelize создает lowerCamelCase.

camelize также преобразует '/' в '::', что полезно для преобразования путей в пространства имён.

'active_record'.camelize                # => "ActiveRecord"
'active_record'.camelize(:lower)        # => "activeRecord"
'active_record/errors'.camelize         # => "ActiveRecord::Errors"
'active_record/errors'.camelize(:lower) # => "activeRecord::Errors"
Также псевдоним для: camelcase
classify() Показать исходный код
# File activesupport/lib/active_support/core_ext/string/inflections.rb, line 187
def classify
  ActiveSupport::Inflector.classify(self)
end

Создает имя класса из имени таблицы в формате множественного числа, как это делает Rails для имён таблиц и моделей. Обратите внимание, что это возвращает строку, а не класс. (Чтобы преобразовать в фактический класс, следуйте за classify с помощью constantize.)

'egg_and_hams'.classify # => "EggAndHam"
'posts'.classify        # => "Post"
constantize() Показать исходный код
# File activesupport/lib/active_support/core_ext/string/inflections.rb, line 65
def constantize
  ActiveSupport::Inflector.constantize(self)
end

constantize пытается найти объявленную константу с указанным в строке именем. Выбрасывает NameError, если имя не соответствует UpperCamelCase или не инициализировано. См. ActiveSupport::Inflector#constantize

'Module'.constantize  # => Module
'Class'.constantize   # => Class
'blargle'.constantize # => NameError: wrong constant name blargle
dasherize() Показать исходный код
# File activesupport/lib/active_support/core_ext/string/inflections.rb, line 125
def dasherize
  ActiveSupport::Inflector.dasherize(self)
end

Заменяет символы подчеркивания на дефисы в строке.

'puni_puni'.dasherize # => "puni-puni"
deconstantize() Показать исходный код
# File activesupport/lib/active_support/core_ext/string/inflections.rb, line 150
def deconstantize
  ActiveSupport::Inflector.deconstantize(self)
end

Удаляет правую часть выражения константы в строке.

'Net::HTTP'.deconstantize   # => "Net"
'::Net::HTTP'.deconstantize # => "::Net"
'String'.deconstantize      # => ""
'::String'.deconstantize    # => ""
''.deconstantize            # => ""

См. также demodulize.

demodulize() Показать исходный код
# File activesupport/lib/active_support/core_ext/string/inflections.rb, line 137
def demodulize
  ActiveSupport::Inflector.demodulize(self)
end

Удаляет модульную часть из выражения константы в строке.

'ActiveRecord::CoreExtensions::String::Inflections'.demodulize # => "Inflections"
'Inflections'.demodulize                                       # => "Inflections"
'::Inflections'.demodulize                                     # => "Inflections"
''.demodulize                                                  # => ''

См. также deconstantize.

exclude?(string) Показать исходный код
# File activesupport/lib/active_support/core_ext/string/exclude.rb, line 8
def exclude?(string)
  !include?(string)
end

Обратное String#include?. Возвращает true, если строка не содержит другую строку.

"hello".exclude? "lo" # => false
"hello".exclude? "ol" # => true
"hello".exclude? ?h   # => false
first(limit = 1) Показать исходный код
# File activesupport/lib/active_support/core_ext/string/access.rb, line 75
def first(limit = 1)
  if limit == 0
    ''
  elsif limit >= size
    self.dup
  else
    to(limit - 1)
  end
end

Возвращает первый символ. Если передан лимит, возвращает подстроку с начала строки до достижения значения лимита. Если заданный лимит больше или равен длине строки, возвращает копию self.

str = "hello"
str.first    # => "h"
str.first(1) # => "h"
str.first(2) # => "he"
str.first(0) # => ""
str.first(6) # => "hello"
foreign_key(separate_class_name_and_id_with_underscore = true) Показать исходный код
# File activesupport/lib/active_support/core_ext/string/inflections.rb, line 214
def foreign_key(separate_class_name_and_id_with_underscore = true)
  ActiveSupport::Inflector.foreign_key(self, separate_class_name_and_id_with_underscore)
end

Создает имя внешнего ключа из имени класса. separate_class_name_and_id_with_underscore устанавливает, следует ли методу вставлять '_' между именем и 'id'.

'Message'.foreign_key        # => "message_id"
'Message'.foreign_key(false) # => "messageid"
'Admin::Post'.foreign_key    # => "post_id"
from(position) Показать исходный код
# File activesupport/lib/active_support/core_ext/string/access.rb, line 44
def from(position)
  self[position..-1]
end

Возвращает подстроку от указанной позиции до конца строки. Если позиция отрицательная, она отсчитывается с конца строки.

str = "hello"
str.from(0)  # => "hello"
str.from(3)  # => "lo"
str.from(-2) # => "lo"

Вы можете комбинировать её с методом to и выполнять интересные действия, такие как:

str = "hello"
str.from(0).to(-1) # => "hello"
str.from(1).to(-2) # => "ell"
html_safe() Показать исходный код
# File activesupport/lib/active_support/core_ext/string/output_safety.rb, line 259
def html_safe
  ActiveSupport::SafeBuffer.new(self)
end

Помечает строку как доверенную и безопасную для использования в HTML. Она будет вставлена в HTML без дополнительного экранирования. Вы несете ответственность за то, чтобы строка не содержала вредоносного контента. Этот метод эквивалентен helper `raw` в представлениях. Рекомендуется использовать `sanitize` вместо этого метода. Его никогда не следует использовать для пользовательского ввода.

humanize(options = {}) Показать исходный код
# File activesupport/lib/active_support/core_ext/string/inflections.rb, line 203
def humanize(options = {})
  ActiveSupport::Inflector.humanize(self, options)
end

Первая буква слова становится заглавной, символы подчеркивания заменяются пробелами, и удаляется заключительный '_id', если он есть. Как и titleize, это предназначено для создания красивого вывода.

Регистр первой буквы может быть отключен, установив необязательный параметр capitalize в false. По умолчанию он равен true.

'employee_salary'.humanize              # => "Employee salary"
'author_id'.humanize                    # => "Author"
'author_id'.humanize(capitalize: false) # => "author"
'_id'.humanize                          # => "Id"
in_time_zone(zone = ::Time.zone) Показать исходный код
# File activesupport/lib/active_support/core_ext/string/zones.rb, line 7
def in_time_zone(zone = ::Time.zone)
  if zone
    ::Time.find_zone!(zone).parse(self)
  else
    to_time
  end
end

Преобразует String в TimeWithZone в текущей временной зоне, если Time.zone или Time.zone_default установлены, в противном случае преобразует String в Time через #to_time

indent(amount, indent_string=nil, indent_empty_lines=false) Показать исходный код
# File activesupport/lib/active_support/core_ext/string/indent.rb, line 40
def indent(amount, indent_string=nil, indent_empty_lines=false)
  dup.tap {|_| _.indent!(amount, indent_string, indent_empty_lines)}
end

Отступы строк в принимаемом объекте:

"def some_method
  some_code
end
".indent(2)
# =>
  def some_method
    some_code
  end

Второй аргумент, indent_string, указывает, какую строку отступа использовать. По умолчанию используется nil, который позволяет методу угадать, посмотрев на первую отступленную строку, и по умолчанию использует пробел, если нет отступа.

"  foo".indent(2)        # => "    foo"
"foo\n\t\tbar".indent(2) # => "\t\tfoo\n\t\t\t\tbar"
"foo".indent(2, "\t")    # => "\t\tfoo"

Хотя indent_string обычно представляет собой один пробел или табуляцию, это может быть любая строка.

Третий аргумент, indent_empty_lines, представляет собой флаг, который определяет, нужно ли отступать пустые строки. Значение по умолчанию — false.

"foo\n\nbar".indent(2)            # => "  foo\n\n  bar"
"foo\n\nbar".indent(2, nil, true) # => "  foo\n  \n  bar"
END_OF_DOCUMENT_MARKER
indent!(amount, indent_string=nil, indent_empty_lines=false) Показать исходный код
# File activesupport/lib/active_support/core_ext/string/indent.rb, line 5
def indent!(amount, indent_string=nil, indent_empty_lines=false)
  indent_string = indent_string || self[/^[ \t]/] || ' '
  re = indent_empty_lines ? /^/ : /^(?!$)/
  gsub!(re, indent_string * amount)
end

То же, что и indent, за исключением того, что отступ применяется к получателю непосредственно.

Возвращает отформатированную строку или nil, если нечего форматировать.

inquiry() Показать исходный код
# File activesupport/lib/active_support/core_ext/string/inquiry.rb, line 10
def inquiry
  ActiveSupport::StringInquirer.new(self)
end

Оборачивает текущую строку в класс ActiveSupport::StringInquirer, что предоставляет более удобный способ проверки на равенство.

env = 'production'.inquiry
env.production?  # => true
env.development? # => false
is_utf8?() Показать исходный код
# File activesupport/lib/active_support/core_ext/string/multibyte.rb, line 38
def is_utf8?
  case encoding
  when Encoding::UTF_8
    valid_encoding?
  when Encoding::ASCII_8BIT, Encoding::US_ASCII
    dup.force_encoding(Encoding::UTF_8).valid_encoding?
  else
    false
  end
end
last(limit = 1) Показать исходный код
# File activesupport/lib/active_support/core_ext/string/access.rb, line 95
def last(limit = 1)
  if limit == 0
    ''
  elsif limit >= size
    self.dup
  else
    from(-limit)
  end
end

Возвращает последний символ строки. Если задан лимит, возвращает подстроку с конца строки до значения лимита (считая назад). Если заданный лимит больше или равен длине строки, возвращает копию self.

str = "hello"
str.last    # => "o"
str.last(1) # => "o"
str.last(2) # => "lo"
str.last(0) # => ""
str.last(6) # => "hello"
mb_chars() Показать исходный код
# File activesupport/lib/active_support/core_ext/string/multibyte.rb, line 34
def mb_chars
  ActiveSupport::Multibyte.proxy_class.new(self)
end

Многобайтовый прокси

mb_chars — это многобайтовая безопасная замена для методов строк.

Он создаёт и возвращает экземпляр класса ActiveSupport::Multibyte::Chars, который инкапсулирует исходную строку. На этом классе-прокси определена юникодобезопасная версия всех методов класса String. Если класс-прокси не отвечает на определённый метод, он передаётся инкапсулированной строке.

name = 'Claus Müller'
name.reverse # => "rell??M sualC"
name.length  # => 13

name.mb_chars.reverse.to_s # => "rellüM sualC"
name.mb_chars.length       # => 12

Цепочки вызовов методов

Все методы прокси Chars, которые обычно возвращают строку, будут возвращать объект Chars. Это позволяет создавать цепочки вызовов методов для результата любого из этих методов.

name.mb_chars.reverse.length # => 12

Взаимодействие и настройка

Объект Chars старается быть как можно более совместимым с объектами String: сортировка и сравнение между String и Char работают как ожидается. Методы с восклицательным знаком изменяют внутреннее представление строки в объекте Chars. Проблемы совместимости легко решаются с помощью вызова to_s.

Для получения дополнительной информации о методах, определённых в прокси Chars, см. ActiveSupport::Multibyte::Chars. Для получения информации о том, как изменить поведение по умолчанию Multibyte, см. ActiveSupport::Multibyte.

parameterize(sep = '-') Показать исходный код
# File activesupport/lib/active_support/core_ext/string/inflections.rb, line 167
def parameterize(sep = '-')
  ActiveSupport::Inflector.parameterize(self, sep)
end

Заменяет специальные символы в строке, чтобы она могла использоваться в качестве части «красивого» URL.

class Person
  def to_param
    "#{id}-#{name.parameterize}"
  end
end

@person = Person.find(1)
# => #<Person id: 1, name: "Donald E. Knuth">

<%= link_to(@person.name, person_path) %>
# => <a href="/person/1-donald-e-knuth">Donald E. Knuth</a>
pluralize(count = nil, locale = :en) Показать исходный код
# File activesupport/lib/active_support/core_ext/string/inflections.rb, line 31
def pluralize(count = nil, locale = :en)
  locale = count if count.is_a?(Symbol)
  if count == 1
    self.dup
  else
    ActiveSupport::Inflector.pluralize(self, locale)
  end
end

Возвращает множественное число слова в строке.

Если указан необязательный параметр count, возвращается единственное число, если count == 1. В любом другом случае возвращается множественное число.

Если указан необязательный параметр locale, слово будет приведено во множественное число на языке, указанном в параметре. По умолчанию этот параметр установлен в :en. Для языков, отличных от английского, необходимо определить собственные правила склонения.

'post'.pluralize             # => "posts"
'octopus'.pluralize          # => "octopi"
'sheep'.pluralize            # => "sheep"
'words'.pluralize            # => "words"
'the blue mailman'.pluralize # => "the blue mailmen"
'CamelOctopus'.pluralize     # => "CamelOctopi"
'apple'.pluralize(1)         # => "apple"
'apple'.pluralize(2)         # => "apples"
'ley'.pluralize(:es)         # => "leyes"
'ley'.pluralize(1, :es)      # => "ley"
remove(*patterns) Показать исходный код
# File activesupport/lib/active_support/core_ext/string/filters.rb, line 31
def remove(*patterns)
  dup.remove!(*patterns)
end

Возвращает новую строку со всеми вхождениями шаблонов, удалёнными.

str = "foo bar test"
str.remove(" test")                 # => "foo bar"
str.remove(" test", /bar/)          # => "foo "
str                                 # => "foo bar test"
remove!(*patterns) Показать исходный код
# File activesupport/lib/active_support/core_ext/string/filters.rb, line 39
def remove!(*patterns)
  patterns.each do |pattern|
    gsub! pattern, ""
  end

  self
end

Изменяет строку, удаляя все вхождения шаблонов.

str = "foo bar test"
str.remove!(" test", /bar/)         # => "foo "
str                                 # => "foo "
safe_constantize() Показать исходный код
# File activesupport/lib/active_support/core_ext/string/inflections.rb, line 76
def safe_constantize
  ActiveSupport::Inflector.safe_constantize(self)
end

safe_constantize пытается найти объявленную константу с именем, указанным в строке. Возвращает nil, если имя не в формате CamelCase или не инициализировано. См. ActiveSupport::Inflector#safe_constantize

'Module'.safe_constantize  # => Module
'Class'.safe_constantize   # => Class
'blargle'.safe_constantize # => nil
singularize(locale = :en) Показать исходный код
# File activesupport/lib/active_support/core_ext/string/inflections.rb, line 54
def singularize(locale = :en)
  ActiveSupport::Inflector.singularize(self, locale)
end

Обратное к pluralize, возвращает единственное число слова в строке.

Если указан необязательный параметр locale, слово будет приведено в единственное число на языке, указанном в параметре. По умолчанию этот параметр установлен в :en. Для языков, отличных от английского, необходимо определить собственные правила склонения.

'posts'.singularize            # => "post"
'octopi'.singularize           # => "octopus"
'sheep'.singularize            # => "sheep"
'word'.singularize             # => "word"
'the blue mailmen'.singularize # => "the blue mailman"
'CamelOctopi'.singularize      # => "CamelOctopus"
'leyes'.singularize(:es)       # => "ley"
squish() Показать исходный код
# File activesupport/lib/active_support/core_ext/string/filters.rb, line 11
def squish
  dup.squish!
end

Возвращает строку, сначала удаляя все пробелы в начале и конце строки, а затем заменяя оставшиеся группы пробелов по одному пробелу.

Обратите внимание, что он обрабатывает как ASCII, так и Unicode пробелы.

%Q{ Multi-line
   string }.squish                   # => "Multi-line string"
" foo   bar    \n   \t   boo".squish # => "foo bar boo"
squish!() Показать исходный код
# File activesupport/lib/active_support/core_ext/string/filters.rb, line 19
def squish!
  gsub!(/\A[[:space:]]+/, '')
  gsub!(/[[:space:]]+\z/, '')
  gsub!(/[[:space:]]+/, ' ')
  self
end

Производит деструктивную сжатие. См. #squish.

str = " foo   bar    \n   \t   boo"
str.squish!                         # => "foo bar boo"
str                                 # => "foo bar boo"
strip_heredoc() Показать исходный код
# File activesupport/lib/active_support/core_ext/string/strip.rb, line 22
def strip_heredoc
  indent = scan(/^[ \t]*(?=\S)/).min.try(:size) || 0
  gsub(/^[ \t]{#{indent}}/, '')
end

Удаляет отступы в heredoc.

Например, в

if options[:usage]
  puts "    This command does such and such.

    Supported options are:
      -h         This message
      ...
".strip_heredoc
end

пользователь увидит сообщение об использовании, выровненное по левому краю.

Технически, он ищет самую незаметную строку в строке и удаляет это количество предваряющих пробелов.

tableize() Показать исходный код
# File activesupport/lib/active_support/core_ext/string/inflections.rb, line 177
def tableize
  ActiveSupport::Inflector.tableize(self)
end

Создаёт имя таблицы, как это делает Rails для имён моделей в имена таблиц. Этот метод использует метод pluralize для последнего слова в строке.

'RawScaledScorer'.tableize # => "raw_scaled_scorers"
'egg_and_ham'.tableize     # => "egg_and_hams"
'fancyCategory'.tableize   # => "fancy_categories"
titlecase()
Псевдоним для: titleize
titleize() Показать исходный код
# File activesupport/lib/active_support/core_ext/string/inflections.rb, line 107
def titleize
  ActiveSupport::Inflector.titleize(self)
end

Заглавная буква каждого слова и замена некоторых символов в строке для создания более красивого заголовка. titleize предназначена для создания красивого вывода. Она не используется внутри Rails.

titleize также псевдоним для titlecase.

'man from the boondocks'.titleize # => "Man From The Boondocks"
'x-men: the last stand'.titleize  # => "X Men: The Last Stand"
Также псевдоним: titlecase
to(position) Показать исходный код
# File activesupport/lib/active_support/core_ext/string/access.rb, line 61
def to(position)
  self[0..position]
end

Возвращает подстроку от начала строки до заданной позиции. Если позиция отрицательная, она отсчитывается с конца строки.

str = "hello"
str.to(0)  # => "h"
str.to(3)  # => "hell"
str.to(-2) # => "hell"

Вы можете использовать её вместе с методом from и делать интересные вещи, например:

str = "hello"
str.from(0).to(-1) # => "hello"
str.from(1).to(-2) # => "ell"
to_date() Показать исходный код
# File activesupport/lib/active_support/core_ext/string/conversions.rb, line 43
def to_date
  ::Date.parse(self, false) unless blank?
end

Преобразует строку в значение типа Дата.

"1-1-2012".to_date   # => Sun, 01 Jan 2012
"01/01/2012".to_date # => Sun, 01 Jan 2012
"2012-12-13".to_date # => Thu, 13 Dec 2012
"12/13/2012".to_date # => ArgumentError: invalid date
to_datetime() Показать исходный код
# File activesupport/lib/active_support/core_ext/string/conversions.rb, line 53
def to_datetime
  ::DateTime.parse(self, false) unless blank?
end

Преобразует строку в значение типа DateTime.

"1-1-2012".to_datetime            # => Sun, 01 Jan 2012 00:00:00 +0000
"01/01/2012 23:59:59".to_datetime # => Sun, 01 Jan 2012 23:59:59 +0000
"2012-12-13 12:50".to_datetime    # => Thu, 13 Dec 2012 12:50:00 +0000
"12/13/2012".to_datetime          # => ArgumentError: invalid date
to_time(form = :local) Показать исходный код
# File activesupport/lib/active_support/core_ext/string/conversions.rb, line 19
def to_time(form = :local)
  parts = Date._parse(self, false)
  return if parts.empty?

  now = Time.now
  time = Time.new(
    parts.fetch(:year, now.year),
    parts.fetch(:mon, now.month),
    parts.fetch(:mday, now.day),
    parts.fetch(:hour, 0),
    parts.fetch(:min, 0),
    parts.fetch(:sec, 0) + parts.fetch(:sec_fraction, 0),
    parts.fetch(:offset, form == :utc ? 0 : nil)
  )

  form == :utc ? time.utc : time.to_time
end

Преобразует строку в значение типа Время. Параметр form может принимать значения :utc или :local (по умолчанию :local).

Время анализируется с помощью метода Time.parse. Если form равно :local, то время задаётся в часовом поясе системы. Если часть даты отсутствует, используется текущая дата, а если часть времени — то предполагается 00:00:00.

"13-12-2012".to_time               # => 2012-12-13 00:00:00 +0100
"06:12".to_time                    # => 2012-12-13 06:12:00 +0100
"2012-12-13 06:12".to_time         # => 2012-12-13 06:12:00 +0100
"2012-12-13T06:12".to_time         # => 2012-12-13 06:12:00 +0100
"2012-12-13T06:12".to_time(:utc)   # => 2012-12-13 05:12:00 UTC
"12/13/2012".to_time               # => ArgumentError: argument out of range
truncate(truncate_at, options = {}) Показать исходный код
# File activesupport/lib/active_support/core_ext/string/filters.rb, line 65
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

Усекает заданную text после заданной length, если text длиннее length.

'Once upon a time in a world far far away'.truncate(27)
# => "Once upon a time in a wo..."

Передайте строку или регулярное выражение :separator для усечения text по естественному разрыву:

'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..."

Последние символы будут заменены строкой :omission (по умолчанию «…») для общей длины не более length.

'And they found that many people were sleeping better.'.truncate(25, omission: '... (continued)')
# => "And they f... (continued)"
truncate_words(words_count, options = {}) Показать исходный код
# File activesupport/lib/active_support/core_ext/string/filters.rb, line 94
def truncate_words(words_count, options = {})
  sep = options[:separator] || /\s+/
  sep = Regexp.escape(sep.to_s) unless Regexp === sep
  if self =~ /\A((?>.+?#{sep}){#{words_count - 1}}.+?)#{sep}.*/m
    $1 + (options[:omission] || '...')
  else
    dup
  end
end

Усекает заданную text после заданного количества слов (words_count).

'Once upon a time in a world far far away'.truncate_words(4)
# => "Once upon a time..."

Передайте строку или регулярное выражение :separator для указания другого разделителя слов:

'Once<br>upon<br>a<br>time<br>in<br>a<br>world'.truncate_words(5, separator: '<br>')
# => "Once<br>upon<br>a<br>time<br>in..."

Последние символы будут заменены строкой :omission (по умолчанию «…»).

'And they found that many people were sleeping better.'.truncate_words(5, omission: '... (continued)')
# => "And they found that many... (continued)"
underscore() Показать исходный код
# File activesupport/lib/active_support/core_ext/string/inflections.rb, line 118
def underscore
  ActiveSupport::Inflector.underscore(self)
end

Обратная операция к camelize. Преобразует выражение в строке в нижний регистр с подчёркиваниями.

underscore также изменит '::' на '/' для преобразования имён пространств в пути.

'ActiveModel'.underscore         # => "active_model"
'ActiveModel::Errors'.underscore # => "active_model/errors"

© 2004–2018 David Heinemeier Hansson
Licensed under the MIT License.

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API