класс ActiveSupport::Inflector::Inflections
Единственный экземпляр этого класса возвращается методом 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
Новые правила добавляются вверху. Таким образом, в приведенном выше примере нерегулярное правило для осьминога теперь будет первым из правил множественного и единственного числа, которое выполняется. Это гарантирует, что ваши правила будут выполняться до любых правил, которые могут быть загружены.
Атрибуты
Публичные методы класса
# File activesupport/lib/active_support/inflector/inflections.rb, line 63 def self.instance(locale = :en) @__instance__[locale] ||= new end
# File activesupport/lib/active_support/inflector/inflections.rb, line 71
def initialize
@plurals, @singulars, @uncountables, @humans, @acronyms = [], [], Uncountables.new, [], {}
define_acronym_regex_patterns
end Публичные методы экземпляра
# File activesupport/lib/active_support/inflector/inflections.rb, line 133 def acronym(word) @acronyms[word.downcase] = word define_acronym_regex_patterns end
Устанавливает новое сокращение. Сокращение должно быть указано так, как оно будет отображаться в строке с применением регистрового стиля "camelize". Строка с символом подчеркивания, содержащая сокращение, сохранит сокращение при передаче в camelize, humanize, или titleize. Строка с регистровым стилем "camelize", содержащая сокращение, сохранит сокращение при применении регистрового стиля "titleize" или "humanize", и преобразует сокращение в одно слово с маленькой буквой без разделителей при передаче в 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 222
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 211 def human(rule, replacement) @humans.prepend([rule, replacement]) end
Устанавливает человекочитаемую форму строки с помощью правила регулярного выражения или сопоставления строк. При использовании замены на основе регулярного выражения, после замены вызывается обычное форматирование humanize. Если используется строка, то форма human должна быть указана как требуется (например, «Имя», а не «имя»).
human /_cnt$/i, '\1_count' human 'legacy_col_person_name', 'Name'
# File activesupport/lib/active_support/inflector/inflections.rb, line 165
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 142 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 152 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 199 def uncountable(*words) @uncountables.add(words) end
Устанавливает слова, которые не исчисляемы и не должны склоняться.
uncountable 'money' uncountable 'money', 'information' uncountable %w( money information rice )
© 2004–2020 David Heinemeier Hansson
Licensed under the MIT License.