Spec-Zone.ru › Ruby on Rails 8.1

класс ActiveSupport::Inflector::Inflections

Родительский класс:
Object

Флексии Active Support

Экземпляр-одиночка этого класса возвращается методом Inflector.inflections. Его можно использовать для задания дополнительных правил словоизменения. Если передать необязательную локаль, можно задать правила для других языков. Локаль по умолчанию — :en. Предоставляются правила только для английского языка.

ActiveSupport::Inflector.inflections(:en) do |inflect|
  inflect.plural /^(ox)$/i, '\1\2en'
  inflect.singular /^(ox)en/i, '\1'

  inflect.irregular 'cactus', 'cacti'

  inflect.uncountable 'equipment'
end

Новые правила добавляются в начало. Поэтому в приведённом выше примере нерегулярное правило для cactus станет первым из выполняемых правил образования множественного и единственного числа. Это гарантирует, что ваши правила будут выполняться раньше любых уже загруженных правил.

Атрибуты

acronyms [R]
humans [R]
plurals [R]
singulars [R]
uncountables [R]

Публичные методы класса

instance (locale = :en) Показать исходный код
# File activesupport/lib/active_support/inflector/inflections.rb, line 77
def self.instance(locale = :en)
  return @__en_instance__ ||= new if locale == :en

  @__instance__[locale] ||= new
end
instance_or_fallback (locale) Показать исходный код
# File activesupport/lib/active_support/inflector/inflections.rb, line 83
def self.instance_or_fallback(locale)
  return @__en_instance__ ||= new if locale == :en

  I18n.fallbacks[locale].each do |k|
    return @__en_instance__ if k == :en && @__en_instance__
    return @__instance__[k] if @__instance__.key?(k)
  end
  instance(locale)
end
new () Показать исходный код
# File activesupport/lib/active_support/inflector/inflections.rb, line 97
def initialize
  @plurals, @singulars, @uncountables, @humans, @acronyms = [], [], Uncountables.new, [], {}
  define_acronym_regex_patterns
end

Публичные методы экземпляра

acronym (word) Показать исходный код
# File activesupport/lib/active_support/inflector/inflections.rb, line 159
def acronym(word)
  @acronyms[word.downcase] = word
  define_acronym_regex_patterns
end

Задаёт новую аббревиатуру. Аббревиатуру следует указывать в том виде, в котором она будет отображаться в строке в стиле camelCase. Строка с подчёркиваниями, содержащая аббревиатуру, сохранит её при передаче в camelize, humanize или titleize. Строка в стиле camelCase, содержащая аббревиатуру, сохранит её при преобразовании в заголовок или удобочитаемый вид, а при передаче в 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'
clear (scope = :all) Показать исходный код
# File activesupport/lib/active_support/inflector/inflections.rb, line 248
def clear(scope = :all)
  case scope
  when :all
    clear(:acronyms)
    clear(:plurals)
    clear(:singulars)
    clear(:uncountables)
    clear(:humans)
  when :acronyms
    @acronyms = {}
    define_acronym_regex_patterns
  when :uncountables
    @uncountables = Uncountables.new
  when :plurals, :singulars, :humans
    instance_variable_set "@#{scope}", []
  end
end

Удаляет загруженные правила словоизменения в указанной области (по умолчанию — :all). Укажите область символом, обозначающим тип правила словоизменения. Возможные значения: :plurals, :singulars, :uncountables, :humans, :acronyms.

clear :all
clear :plurals
human (rule, replacement) Показать исходный код
# File activesupport/lib/active_support/inflector/inflections.rb, line 237
def human(rule, replacement)
  @humans.prepend([rule, replacement])
end

Задаёт удобочитаемую форму строки с помощью правила на основе регулярного выражения или отображения строк. При замене на основе регулярного выражения после замены применяется обычное форматирование метода humanize. Если используется строка, удобочитаемую форму следует задать в желаемом виде (например, «The name», а не «the_name»).

human /_cnt$/i, '\1_count'
human 'legacy_col_person_name', 'Name'
irregular (singular, plural) Показать исходный код
# File activesupport/lib/active_support/inflector/inflections.rb, line 191
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 'cactus', 'cacti'
irregular 'person', 'people'
plural (rule, replacement) Показать исходный код
# File activesupport/lib/active_support/inflector/inflections.rb, line 168
def plural(rule, replacement)
  @uncountables.delete(rule) if rule.is_a?(String)
  @uncountables.delete(replacement)
  @plurals.prepend([rule, replacement])
end

Задаёт новое правило образования множественного числа и строку замены. Правило может быть строкой или регулярным выражением. Замена всегда должна быть строкой и может содержать ссылки на данные, соответствующие правилу.

singular (rule, replacement) Показать исходный код
# File activesupport/lib/active_support/inflector/inflections.rb, line 178
def singular(rule, replacement)
  @uncountables.delete(rule) if rule.is_a?(String)
  @uncountables.delete(replacement)
  @singulars.prepend([rule, replacement])
end

Задаёт новое правило образования единственного числа и строку замены. Правило может быть строкой или регулярным выражением. Замена всегда должна быть строкой и может содержать ссылки на данные, соответствующие правилу.

uncountable (*words) Показать исходный код
# File activesupport/lib/active_support/inflector/inflections.rb, line 225
def uncountable(*words)
  @uncountables.add(words)
end

Задаёт неисчисляемые слова, которые не должны подвергаться словоизменению.

uncountable 'money'
uncountable 'money', 'information'
uncountable %w( money information rice )

© 2004–2021 David Heinemeier Hansson
Licensed under the MIT License.

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API