класс ActiveSupport::Inflector::Inflections
Экземпляр этого класса, являющийся синглтоном, возвращается методом ActiveSupport::Inflector#inflections, который затем можно использовать для задания дополнительных правил склонения. Если передать необязательный параметр 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 66 def self.instance(locale = :en) @__instance__[locale] ||= new end
# File activesupport/lib/active_support/inflector/inflections.rb, line 75
def initialize
@plurals, @singulars, @uncountables, @humans, @acronyms = [], [], Uncountables.new, [], {}
define_acronym_regex_patterns
end Открытые методы экземпляра
# File activesupport/lib/active_support/inflector/inflections.rb, line 137 def acronym(word) @acronyms[word.downcase] = word define_acronym_regex_patterns end
Указывает новое сокращение. Сокращение должно быть указано так, как оно будет отображаться в строке с использованием camelization. Строка со знаком подчеркивания, содержащая сокращение, сохранит сокращение при передаче в camelize, humanize, или titleize. Строка с использованием camelization, содержащая сокращение, сохранит сокращение при преобразовании в заголовок или в человекочитаемый вид, и преобразует сокращение в неразделенное слово в нижнем регистре при передаче в 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 226
def clear(scope = :all)
case scope
when :all
@plurals, @singulars, @uncountables, @humans = [], [], Uncountables.new, []
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 215 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 169
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 146 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 156 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 203 def uncountable(*words) @uncountables.add(words) end
Указывает слова, которые неисчисляемы и не должны склоняться.
uncountable 'money' uncountable 'money', 'information' uncountable %w( money information rice )
© 2004–2018 David Heinemeier Hansson
Licensed under the MIT License.