класс ActiveSupport::Inflector::Inflections
Единственный экземпляр этого класса возвращается методом ActiveSupport::Inflector#inflections, который можно использовать для указания дополнительных правил склонения. Если передать необязательный локаль, можно указать правила для других языков. По умолчанию используется локаль :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 69
def initialize
@plurals, @singulars, @uncountables, @humans, @acronyms, @acronym_regex = [], [], Uncountables.new, [], {}, /(?=a)b/
end Публичные методы экземпляра
# File activesupport/lib/active_support/inflector/inflections.rb, line 129
def acronym(word)
@acronyms[word.downcase] = word
@acronym_regex = /#{@acronyms.values.join("|")}/
end Указывает новое сокращение. Сокращение должно быть указано так, как оно будет отображаться в пришлизованной строке. Строка с символом подчеркивания, содержащая сокращение, сохранит сокращение при передаче в camelize, humanize, или titleize. Пришлизованная строка, содержащая сокращение, сохранит сокращение при применении 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 218
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 207 def human(rule, replacement) @humans.prepend([rule, replacement]) end
Указывает гуманизированную форму строки с помощью правила регулярного выражения или отображения строки. При использовании замены на основе регулярного выражения, вызывается нормальная форматизация humanize после замены. Если используется строка, гуманизированная форма должна быть указана как необходимо (например, 'Название', а не 'the_name').
human /_cnt$/i, '\1_count' human 'legacy_col_person_name', 'Name'
# File activesupport/lib/active_support/inflector/inflections.rb, line 161
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 138 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 148 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 195 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.