Spec-Zone.ru › Ruby on Rails 5.2

класс String

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

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

'ScaleScore'.tableize # => "scale_scores"

Константы

BLANK_RE
КОДИРОВАННЫЕ_ПРОБЕЛЫ

Методы публичного экземпляра

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

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

at(position) Показать исходный код
# File activesupport/lib/active_support/core_ext/string/access.rb, line 29
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 122
def blank?
  # The regexp that matches blank strings is expensive. For the case of empty
  # strings we can speed up this method (~3.5x) with an empty? call. The
  # penalty for the rest of strings is marginal.
  empty? ||
    begin
      BLANK_RE.match?(self)
    rescue Encoding::CompatibilityError
      ENCODED_BLANKS[self.encoding].match?(self)
    end
end

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

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

Поддерживаются пробелы Юникода:

"\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 91
def camelize(first_letter = :upper)
  case first_letter
  when :upper
    ActiveSupport::Inflector.camelize(self, true)
  when :lower
    ActiveSupport::Inflector.camelize(self, false)
  else
    raise ArgumentError, "Invalid option, use either :upper or :lower."
  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 210
def classify
  ActiveSupport::Inflector.classify(self)
end

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

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

constantize пытается найти объявленную константу с именем, указанным в строке. Вызывает исключение NameError, когда имя не в CamelCase или не инициализировано. См. 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 134
def dasherize
  ActiveSupport::Inflector.dasherize(self)
end

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

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

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

'ActiveSupport::Inflector::Inflections'.demodulize # => "Inflections"
'Inflections'.demodulize                           # => "Inflections"
'::Inflections'.demodulize                         # => "Inflections"
''.demodulize                                      # => ''

См. также deconstantize.

exclude?(string) Показать исходный код
# File activesupport/lib/active_support/core_ext/string/exclude.rb, line 10
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 77
def first(limit = 1)
  if limit == 0
    ""
  elsif limit >= size
    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 251
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 46
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 255
def html_safe
  ActiveSupport::SafeBuffer.new(self)
end

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

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

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

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

Постфикс '_id' можно сохранить и вывести с большой буквы, установив необязательный параметр keep_id_suffix в true. По умолчанию этот параметр равен false.

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

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

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

Отступает строки в получателе:

<<EOS.indent(2)
def some_method
  some_code
end
EOS
# =>
  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"
indent!(amount, indent_string = nil, indent_empty_lines = false) Показать исходный код
# File activesupport/lib/active_support/core_ext/string/indent.rb, line 7
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 12
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 47
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

Возвращает true, если строка имеет кодировку utf_8.

utf_8_str = "some string".encode "UTF-8"
iso_str = "some string".encode "ISO-8859-1"

utf_8_str.is_utf8? # => true
iso_str.is_utf8?   # => false
last(limit = 1) Показать исходный код
# File activesupport/lib/active_support/core_ext/string/access.rb, line 97
def last(limit = 1)
  if limit == 0
    ""
  elsif limit >= size
    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 36
def mb_chars
  ActiveSupport::Multibyte.proxy_class.new(self)
end

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

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

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

>> "lj".upcase
=> "lj"
>> "lj".mb_chars.upcase.to_s
=> "LJ"

ПРИМЕЧАНИЕ: Приведённый выше пример полезен для версий Ruby до 2.4. В Ruby 2.4 поддерживаются преобразования регистра Unicode.

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

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

name.mb_chars.reverse.length # => 12

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

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

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

parameterize(separator: "-", preserve_case: false) Показать исходный код
# File activesupport/lib/active_support/core_ext/string/inflections.rb, line 190
def parameterize(separator: "-", preserve_case: false)
  ActiveSupport::Inflector.parameterize(self, separator: separator, preserve_case: preserve_case)
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>

Чтобы сохранить регистр символов в строке, используйте аргумент preserve_case.

class Person
  def to_param
    "#{id}-#{name.parameterize(preserve_case: true)}"
  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 33
def pluralize(count = nil, locale = :en)
  locale = count if count.is_a?(Symbol)
  if count == 1
    dup
  else
    ActiveSupport::Inflector.pluralize(self, locale)
  end
end

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

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

Если указан необязательный параметр 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 32
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 40
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 78
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 56
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 13
def squish
  dup.squish!
end

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

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

%{ 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 21
def squish!
  gsub!(/[[:space:]]+/, " ")
  strip!
  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
  gsub(/^#{scan(/^[ \t]*(?=\S)/).min}/, "".freeze)
end

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

Например, в

if options[:usage]
  puts <<-USAGE.strip_heredoc
    This command does such and such.

    Supported options are:
      -h         This message
      ...
  USAGE
end

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

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

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

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

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

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

При необходимости можно сохранить и привести к верхнему регистру суффиксы «_id», «Id» и т.п. установив необязательный параметр keep_id_suffix в значение true. По умолчанию этот параметр равен false.

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

'man from the boondocks'.titleize                       # => "Man From The Boondocks"
'x-men: the last stand'.titleize                        # => "X Men: The Last Stand"
'string_ending_with_id'.titleize(keep_id_suffix: true)  # => "String Ending With Id"
Также псевдоним: titlecase
to(position) Показать исходный код
# File activesupport/lib/active_support/core_ext/string/access.rb, line 63
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 46
def to_date
  ::Date.parse(self, false) unless blank?
end

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

"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 56
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 21
def to_time(form = :local)
  parts = Date._parse(self, false)
  used_keys = %i(year mon mday hour min sec sec_fraction offset)
  return if (parts.keys & used_keys).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

Преобразует строку в значение типа Time. Параметр 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 06: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 66
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 95
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 127
def underscore
  ActiveSupport::Inflector.underscore(self)
end

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

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

'ActiveModel'.underscore         # => "active_model"
'ActiveModel::Errors'.underscore # => "active_model/errors"
upcase_first() Показать исходный код
# File activesupport/lib/active_support/core_ext/string/inflections.rb, line 240
def upcase_first
  ActiveSupport::Inflector.upcase_first(self)
end

Преобразует только первый символ в верхний регистр.

'what a Lovely Day'.upcase_first # => "What a Lovely Day"
'w'.upcase_first                 # => "W"
''.upcase_first                  # => ""

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

Spec-Zone.ru

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