Ruby on Rails
ActiveSupport
Поиск…
замечания
ActiveSupport - это утилита универсальных инструментов, используемых остальной частью Rails.
Одним из основных способов предоставления этих инструментов является monkeypatching родные типы Ruby. Они называются Core Extensions .
Основные расширения: доступ к строкам
Строка # в
Возвращает подстроку строкового объекта. Тот же интерфейс, что и String#[]
.
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) # => ""
Строка # из
Возвращает подстроку из заданной позиции в конец строки.
str = "hello" str.from(0) # => "hello" str.from(3) # => "lo" str.from(-2) # => "lo"
Строка # для
Возвращает подстроку от начала строки до заданной позиции.
Если позиция отрицательная, она отсчитывается от конца строки.
str = "hello" str.to(0) # => "h" str.to(3) # => "hell" str.to(-2) # => "hell"
from
и to
может использоваться в тандеме.
str = "hello" str.from(0).to(-1) # => "hello" str.from(1).to(-2) # => "ell"
Строка # первый
Возвращает первый символ или заданное количество символов до длины строки.
str = "hello" str.first # => "h" str.first(1) # => "h" str.first(2) # => "he" str.first(0) # => "" str.first(6) # => "hello"
Строка # последний
Возвращает последний символ или заданное количество символов с конца строки, отсчитывающей назад.
str = "hello" str.last # => "o" str.last(1) # => "o" str.last(2) # => "lo" str.last(0) # => "" str.last(6) # => "hello"
Расширения ядра: преобразование строк и даты / времени
Строка # TO_TIME
Преобразует строку в значение времени. Параметр form
может быть :utc
или :local
, по умолчанию - :local
.
"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
Строка # to_date
Преобразует строку в значение 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
Преобразует строку в значение 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
Основные расширения: исключение строк
Строка # исключить?
Обратный String#include?
"hello".exclude? "lo" # => false "hello".exclude? "ol" # => true "hello".exclude? ?h # => false
Основные расширения: строковые фильтры
Строка # мармелад
Возвращает версию данной строки без начального или конечного пробела и объединяет все последовательные пробелы в интерьере в одиночные пробелы. Деструктивная версия squish!
действует непосредственно на экземпляр строки.
Обрабатывает как пробелы ASCII, так и Unicode.
%{ Multi-line string }.squish # => "Multi-line string" " foo bar \n \t boo".squish # => "foo bar boo"
Строка # удалить
Возвращает новую строку с удалением всех вхождений шаблонов. Уничтожьте версию remove!
действует непосредственно на заданную строку.
str = "foo bar test" str.remove(" test") # => "foo bar" str.remove(" test", /bar/) # => "foo "
Строка # усечение
Возвращает копию заданной строки, усеченной с заданной длиной, если длина строки больше длины.
'Once upon a time in a world far far away'.truncate(27) # => "Once upon a time in a wo..."
Передача строки или регулярного выражения :separator
для усечения при естественном разрыве
'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..."
Строка # truncate_words
Возвращает строку, усеченную после заданного количества слов.
'Once upon a time in a world far far away'.truncate_words(4) # => "Once upon a time..."
Передайте строку или regexp, чтобы указать другой разделитель слов
'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)"
Строка # strip_heredoc
Вырезание полос в heredocs. Ищет наименее исписанную непустую строку и удаляет это количество ведущих пробелов.
if options[:usage] puts <<-USAGE.strip_heredoc This command does such and such. Supported options are: -h This message ... USAGE end
пользователь увидит
This command does such and such.
Supported options are:
-h This message
...
Основные расширения: String Inflection
Строка # множественное число
Возвраты множественной формы строки. Необязательно принимает параметр count
и возвращает особую форму, если count == 1
. Также принимает параметр locale
для специфического для языка плюрализации.
'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"
Строка # образовывать форму единственного числа
Возвращает единственную форму строки. Принимает необязательный параметр locale
.
'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"
Строка # constantize
Пытается найти объявленную константу с именем, указанным в строке. Он вызывает NameError
когда имя не находится в CamelCase или не инициализировано.
'Module'.constantize # => Module 'Class'.constantize # => Class 'blargle'.constantize # => NameError: wrong constant name blargle
Строка # safe_constantize
Выполняет constantize
но возвращает nil
вместо повышения NameError
.
'Module'.safe_constantize # => Module 'Class'.safe_constantize # => Class 'blargle'.safe_constantize # => nil
Строка # camelize
Преобразует строки в UpperCamelCase по умолчанию, если :lower
задается как параметр преобразует вместо lowerCamelCase.
псевдоним: camelcase
Примечание: также будет конвертировать /
в ::
что полезно для преобразования путей в пространства имен.
'active_record'.camelize # => "ActiveRecord" 'active_record'.camelize(:lower) # => "activeRecord" 'active_record/errors'.camelize # => "ActiveRecord::Errors" 'active_record/errors'.camelize(:lower) # => "activeRecord::Errors"
Строка # titleize
Капитализует все слова и заменяет некоторые символы в строке, чтобы создать более привлекательный заголовок.
псевдоним: titlecase
'man from the boondocks'.titleize # => "Man From The Boondocks" 'x-men: the last stand'.titleize # => "X Men: The Last Stand"
Строка # подчеркивание
Делает подчеркнутую, строчную форму из выражения в строке. Реверс camelize
.
Примечание. underscore
также изменит ::
на /
чтобы преобразовать пространства имен в пути.
'ActiveModel'.underscore # => "active_model" 'ActiveModel::Errors'.underscore # => "active_model/errors"
Строка # dasherize
Заменяет символы подчеркивания тире в строке.
'puni_puni'.dasherize # => "puni-puni"
Строка # demodulize
Удаляет часть модуля из константного выражения в строке.
'ActiveRecord::CoreExtensions::String::Inflections'.demodulize # => "Inflections" 'Inflections'.demodulize # => "Inflections" '::Inflections'.demodulize # => "Inflections" ''.demodulize # => ''
Строка # deconstantize
Удаляет самый правый сегмент из константного выражения в строке.
'Net::HTTP'.deconstantize # => "Net" '::Net::HTTP'.deconstantize # => "::Net" 'String'.deconstantize # => "" '::String'.deconstantize # => "" ''.deconstantize # => ""
Строка # Параметрирование
Заменяет специальные символы в строке, чтобы ее можно было использовать как часть «симпатичного» URL-адреса.
"Donald E. Knuth".parameterize # => "donald-e-knuth"
Сохраните случай символов в строке с аргументом :preserve_case
.
"Donald E. Knuth".parameterize(preserve_case: true) # => "Donald-E-Knuth"
Очень распространенным вариантом использования для parameterize
является переопределение метода to_param
модели ActiveRecord для поддержки более описательных URL-адресов.
class Person < ActiveRecord::Base def to_param "#{id}-#{name.parameterize}" end end Person.find(1).to_param # => "1-donald-e-knuth"
Строка # tableize
Создает имя таблицы, например Rails, для моделей с именами таблиц. Плюрализует последнее слово в строке.
'RawScaledScorer'.tableize # => "raw_scaled_scorers" 'ham_and_egg'.tableize # => "ham_and_eggs" 'fancyCategory'.tableize # => "fancy_categories"
Строка # классифицируют
Возвращает строку имени класса из множественного имени таблицы, такого как Rails для имен таблиц для моделей.
'ham_and_eggs'.classify # => "HamAndEgg" 'posts'.classify # => "Post"
Строка # Humanize
Заглавное слово первого слова, превращает подчеркивания в пробелы и разбивает конечный _id
если он присутствует.
'employee_salary'.humanize # => "Employee salary" 'author_id'.humanize # => "Author" 'author_id'.humanize(capitalize: false) # => "author" '_id'.humanize # => "Id"
Строка # upcase_first
Преобразует только первый символ в верхний регистр.
'what a Lovely Day'.upcase_first # => "What a Lovely Day" 'w'.upcase_first # => "W" ''.upcase_first # => ""
Строка # foreign_key
Создает имя внешнего ключа из имени класса. Передайте false
параметр, чтобы отключить добавление _
между именем и id
.
'Message'.foreign_key # => "message_id" 'Message'.foreign_key(false) # => "messageid" 'Admin::Post'.foreign_key # => "post_id"