Spec-Zone.ru › Ruby on Rails 6.1

класс 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

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

Атрибуты

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

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

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

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

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

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

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

Spec-Zone.ru

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