Spec-Zone.ru › Ruby on Rails 5.0

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

Родитель:
Объект

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

Новые правила добавляются в начало. Таким образом, в приведённом выше примере нерегулярное правило для осьминога (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 61
def self.instance(locale = :en)
  @__instance__[locale] ||= new
end
new() Показать исходный код
# File activesupport/lib/active_support/inflector/inflections.rb, line 67
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 127
def acronym(word)
  @acronyms[word.downcase] = word
  @acronym_regex = /#{@acronyms.values.join("|")}/
end

Устанавливает новое аббревиатура. Аббревиатура должна быть указана в том виде, как она будет отображаться в строке с использованием camelCase. Строка с символом подчеркивания, содержащая аббревиатуру, сохранит аббревиатуру при передаче в camelize, humanize, или titleize. Строка camelCase, содержащая аббревиатуру, сохранит аббревиатуру при преобразовании в title case или human case, и преобразует аббревиатуру в строку с одним маленьким словом без разделителей при передаче в 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 216
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 205
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 159
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 136
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 146
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 193
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