class ActiveSupport::Inflector::Inflections
Экземпляр этого класса, являющийся синглтоном, возвращается методом ActiveSupport::Inflector#inflections, который затем может использоваться для указания дополнительных правил склонения. Если передан необязательный параметр locale, можно указать правила для других языков. По умолчанию locale равен :en. Предоставляются только правила для английского языка.
ActiveSupport::Inflector.inflections(:en) do |inflect| inflect.plural /^(ox)$/i, '\1\2en' inflect.singular /^(ox)en/i, '\1' inflect.irregular 'octopus', 'octopi' inflect.uncountable 'equipment' end
Новые правила добавляются в начало. Таким образом, в приведенном выше примере нерегулярное правило для осьминога (octopus) теперь будет первым в правилах множественного и единственного числа, которые применяются. Это гарантирует, что ваши правила выполняются до любых правил, которые уже могли быть загружены.
Атрибуты
Публичные методы класса
# File activesupport/lib/active_support/inflector/inflections.rb, line 30 def self.instance(locale = :en) @__instance__[locale] ||= new end
# File activesupport/lib/active_support/inflector/inflections.rb, line 36
def initialize
@plurals, @singulars, @uncountables, @humans, @acronyms, @acronym_regex = [], [], [], [], {}, /(?=a)b/
end Публичные методы экземпляра
# File activesupport/lib/active_support/inflector/inflections.rb, line 96
def acronym(word)
@acronyms[word.downcase] = word
@acronym_regex = /#{@acronyms.values.join("|")}/
end Определяет новое аббревиатуру. Аббревиатура должна быть указана так, как она будет отображаться в строке с использованием верблюжьего случая (camelCase). Строка со знаками подчеркивания, содержащая аббревиатуру, сохранит аббревиатуру при передаче в camelize, humanize, или titleize. Строка с верблюжьим случаем, содержащая аббревиатуру, сохранит аббревиатуру при преобразовании в заголовок или в человекопонятную форму и преобразует аббревиатуру в однословную строку с маленькой буквой при передаче в underscore.
acronym 'HTML' titleize 'html' # => 'HTML' camelize 'html' # => 'HTML' underscore 'MyHTML' # => 'my_html'
Однако аббревиатура должна быть отдельным элементом и не являться частью другого слова, чтобы преобразования ее распознали:
acronym 'HTTP' camelize 'my_http_delimited' # => 'MyHTTPDelimited' camelize 'https' # => 'Https', not 'HTTPs' underscore 'HTTPS' # => 'http_s', not 'https' acronym 'HTTPS' camelize 'https' # => 'HTTPS' underscore 'HTTPS' # => 'https'
Примечание: аббревиатуры, переданные в pluralize, больше не будут распознаваться, поскольку аббревиатура не будет отдельным элементом в результирующей форме множественного числа. Чтобы обойти эту проблему, вы должны указать форму множественного числа также как аббревиатуру:
acronym 'API'
camelize(pluralize('api')) # => 'Apis'
acronym 'APIs'
camelize(pluralize('api')) # => 'APIs'
acronym может быть использовано для указания любого слова, содержащего аббревиатуру или иначе требующего нестандартного форматирования. Единственное ограничение состоит в том, что слово должно начинаться с заглавной буквы.
acronym 'RESTful' underscore 'RESTful' # => 'restful' underscore 'RESTfulController' # => 'restful_controller' titleize 'RESTfulController' # => 'RESTful Controller' camelize 'restful' # => 'RESTful' camelize 'restful_controller' # => 'RESTfulController' acronym 'McDonald' underscore 'McDonald' # => 'mcdonald' camelize 'mcdonald' # => 'McDonald'
# File activesupport/lib/active_support/inflector/inflections.rb, line 185
def clear(scope = :all)
case scope
when :all
@plurals, @singulars, @uncountables, @humans = [], [], [], []
else
instance_variable_set "@#{scope}", []
end
end Очищает загруженные правила склонения в заданном объеме (по умолчанию :all). Укажите объем в виде символа типа склонения, варианты: :plurals, :singulars, :uncountables, :humans.
clear :all clear :plurals
# File activesupport/lib/active_support/inflector/inflections.rb, line 174 def human(rule, replacement) @humans.prepend([rule, replacement]) end
Определяет человекопонятную форму строки с помощью правила регулярного выражения или сопоставления строк. При использовании замены на основе регулярного выражения вызывается стандартное форматирование humanize после замены. При использовании строки, человекопонятная форма должна быть указана в желаемом формате (например, 'Название', а не 'название_').
human /_cnt$/i, '\1_count' human 'legacy_col_person_name', 'Name'
# File activesupport/lib/active_support/inflector/inflections.rb, line 128
def irregular(singular, plural)
@uncountables.delete(singular)
@uncountables.delete(plural)
s0 = singular[0]
srest = singular[1..-1]
p0 = plural[0]
prest = plural[1..-1]
if s0.upcase == p0.upcase
plural(/(#{s0})#{srest}$/i, '\1' + prest)
plural(/(#{p0})#{prest}$/i, '\1' + prest)
singular(/(#{s0})#{srest}$/i, '\1' + srest)
singular(/(#{p0})#{prest}$/i, '\1' + srest)
else
plural(/#{s0.upcase}(?i)#{srest}$/, p0.upcase + prest)
plural(/#{s0.downcase}(?i)#{srest}$/, p0.downcase + prest)
plural(/#{p0.upcase}(?i)#{prest}$/, p0.upcase + prest)
plural(/#{p0.downcase}(?i)#{prest}$/, p0.downcase + prest)
singular(/#{s0.upcase}(?i)#{srest}$/, s0.upcase + srest)
singular(/#{s0.downcase}(?i)#{srest}$/, s0.downcase + srest)
singular(/#{p0.upcase}(?i)#{prest}$/, s0.upcase + srest)
singular(/#{p0.downcase}(?i)#{prest}$/, s0.downcase + srest)
end
end Определяет новое нерегулярное склонение, которое применяется к форме множественного и единственного числа одновременно. Это можно использовать только для строк, а не для регулярных выражений. Просто передайте нерегулярную форму в единственном и множественном числе.
irregular 'octopus', 'octopi' irregular 'person', 'people'
# File activesupport/lib/active_support/inflector/inflections.rb, line 105 def plural(rule, replacement) @uncountables.delete(rule) if rule.is_a?(String) @uncountables.delete(replacement) @plurals.prepend([rule, replacement]) end
Определяет новое правило множественного числа и его замену. Правило может быть строкой или регулярным выражением. Замена всегда должна быть строкой, которая может содержать ссылки на сопоставленные данные из правила.
# File activesupport/lib/active_support/inflector/inflections.rb, line 115 def singular(rule, replacement) @uncountables.delete(rule) if rule.is_a?(String) @uncountables.delete(replacement) @singulars.prepend([rule, replacement]) end
Определяет новое правило единственного числа и его замену. Правило может быть строкой или регулярным выражением. Замена всегда должна быть строкой, которая может содержать ссылки на сопоставленные данные из правила.
# File activesupport/lib/active_support/inflector/inflections.rb, line 162 def uncountable(*words) @uncountables += words.flatten.map(&:downcase) end
Определяет слова, которые не склоняются.
uncountable 'money' uncountable 'money', 'information' uncountable %w( money information rice )
© 2004–2018 David Heinemeier Hansson
Licensed under the MIT License.