Spec-Zone.ru › Ruby on Rails 5.2

класс 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) теперь будет первым в правилах множественного и единственного числа, что обрабатывается. Это гарантирует, что ваши правила будут выполняться до любых правил, которые могли быть загружены ранее.

Атрибуты

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

Открытые методы класса

instance(locale = :en) Показать исходный код
# File activesupport/lib/active_support/inflector/inflections.rb, line 66
def self.instance(locale = :en)
  @__instance__[locale] ||= new
end
new() Показать исходный код
# File activesupport/lib/active_support/inflector/inflections.rb, line 75
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 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'
clear(scope = :all) Показать исходный код
# 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
human(rule, replacement) Показать исходный код
# 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'
irregular(singular, plural) Показать исходный код
# 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'
plural(rule, replacement) Показать исходный код
# 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

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

singular(rule, replacement) Показать исходный код
# 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

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

uncountable(*words) Показать исходный код
# 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.

Spec-Zone.ru

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