Spec-Zone.ru › Ruby on Rails 6.0

class ActiveSupport::Inflector::Inflections

Parent:
Объект

Экземпляр этого класса в качестве синглтона возвращается методом 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

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

Атрибуты

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

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

instance(locale = :en) Показать исходный код
# File activesupport/lib/active_support/inflector/inflections.rb, line 64
def self.instance(locale = :en)
  @__instance__[locale] ||= new
end
new() Показать исходный код
# File activesupport/lib/active_support/inflector/inflections.rb, line 72
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 134
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 223
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 212
def human(rule, replacement)
  @humans.prepend([rule, replacement])
end

Указывает «человекочитаемую» форму строки с помощью правила регулярного выражения или соответствия строк. При использовании замены на основе регулярного выражения, после замены вызывается обычное форматирование «humanize». При использовании строки, форма «human» должна быть указана как требуется (например, «Название объекта», а не «name_object»).

human /_cnt$/i, '\1_count'
human 'legacy_col_person_name', 'Name'
irregular(singular, plural) Показать исходный код
# File activesupport/lib/active_support/inflector/inflections.rb, line 166
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 143
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 153
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 200
def uncountable(*words)
  @uncountables.add(words)
end

Указывает слова, которые не считаются и не должны склоняться.

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

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

Spec-Zone.ru

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