class 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 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 Публичные методы экземпляра
Указывает новое аббревиатуру. Аббревиатура должна быть указана так, как она будет отображаться в строке с применением camelCase. Строка со знаком подчеркивания, содержащая аббревиатуру, сохранит аббревиатуру при передаче в camelize, humanize, или titleize. Строка с camelCase, содержащая аббревиатуру, сохранит аббревиатуру при применении 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 96
def acronym(word)
@acronyms[word.downcase] = word
@acronym_regex = /#{@acronyms.values.join("|")}/
end Очищает загруженные правила склонения в заданном объеме (по умолчанию :all). Укажите объем в виде символа типа склонения, варианты: :plurals, :singulars, :uncountables, :humans.
clear :all clear :plurals
# 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 Указывает человекочитаемую форму строки с помощью правила регулярного выражения или отображения строк. При использовании замены на основе регулярного выражения после замены вызывается стандартная форма форматирования humanize. Если используется строка, то человекочитаемая форма должна быть указана по желанию (например, 'Название', а не 'name').
human /_cnt$/i, '\1_count' human 'legacy_col_person_name', 'Name'
# File activesupport/lib/active_support/inflector/inflections.rb, line 174 def human(rule, replacement) @humans.prepend([rule, replacement]) end
Указывает новое нерегулярное склонение, которое применяется к множественному и единственному числу одновременно. Это можно использовать только для строк, а не для регулярных выражений. Вы просто передаете нерегулярное склонение в форме единственного и множественного числа.
irregular 'octopus', 'octopi' irregular 'person', 'people'
# 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 Указывает новое правило множественного числа и его замену. Правило может быть строкой или регулярным выражением. Замена всегда должна быть строкой, которая может содержать ссылки на совпадающие данные из правила.
# 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
Добавляет слова, которые не должны склоняться.
uncountable 'money' uncountable 'money', 'information' uncountable %w( money information rice )
# File activesupport/lib/active_support/inflector/inflections.rb, line 162 def uncountable(*words) (@uncountables << words).flatten! end
© 2004–2016 David Heinemeier Hansson
Licensed under the MIT License.