Spec-Zone.ru › Ruby on Rails 5.1

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

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

Атрибуты

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 63
def self.instance(locale = :en)
  @__instance__[locale] ||= new
end
new() Показать исходный код
# File activesupport/lib/active_support/inflector/inflections.rb, line 69
def initialize
  @plurals, @singulars, @uncountables, @humans, @acronyms, @acronym_regex = [], [], Uncountables.new, [], {}, /(?=a)b/
end

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

acronym(word) Показать исходный код
# File activesupport/lib/active_support/inflector/inflections.rb, line 129
def acronym(word)
  @acronyms[word.downcase] = word
  @acronym_regex = /#{@acronyms.values.join("|")}/
end

Указывает новое сокращение. Сокращение должно быть указано так, как оно будет отображаться в пришлизованной строке. Строка с символом подчеркивания, содержащая сокращение, сохранит сокращение при передаче в camelize, humanize, или titleize. Пришлизованная строка, содержащая сокращение, сохранит сокращение при применении 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 218
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 207
def human(rule, replacement)
  @humans.prepend([rule, replacement])
end

Указывает гуманизированную форму строки с помощью правила регулярного выражения или отображения строки. При использовании замены на основе регулярного выражения, вызывается нормальная форматизация humanize после замены. Если используется строка, гуманизированная форма должна быть указана как необходимо (например, 'Название', а не '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 161
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 138
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 148
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 195
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