Spec-Zone.ru › Ruby on Rails 4.1

class ActiveSupport::Inflector::Inflections

Parent:
Object

Единственный экземпляр этого класса возвращается методом 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 30
def self.instance(locale = :en)
  @__instance__[locale] ||= new
end
new() Показать исходный код
# File activesupport/lib/active_support/inflector/inflections.rb, line 36
def initialize
  @plurals, @singulars, @uncountables, @humans, @acronyms, @acronym_regex = [], [], [], [], {}, /(?=a)b/
end

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

acronym(word) Показать исходный код

Указывает новое аббревиатуру. Аббревиатура должна быть указана так, как она будет отображаться в строке с применением camelCase. Строка со знаком подчеркивания, содержащая аббревиатуру, сохранит аббревиатуру при передаче в camelize, humanize, или titleize. Строка с camelCase, содержащая аббревиатуру, сохранит аббревиатуру при применении 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'
# File activesupport/lib/active_support/inflector/inflections.rb, line 96
def acronym(word)
  @acronyms[word.downcase] = word
  @acronym_regex = /#{@acronyms.values.join("|")}/
end
clear(scope = :all) Показать исходный код

Очищает загруженные правила склонения в заданном объеме (по умолчанию :all). Укажите объем в виде символа типа склонения, варианты: :plurals, :singulars, :uncountables, :humans.

clear :all
clear :plurals
# File activesupport/lib/active_support/inflector/inflections.rb, line 185
def clear(scope = :all)
  case scope
    when :all
      @plurals, @singulars, @uncountables, @humans = [], [], [], []
    else
      instance_variable_set "@#{scope}", []
  end
end
human(rule, replacement) Показать исходный код

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

human /_cnt$/i, '\1_count'
human 'legacy_col_person_name', 'Name'
# File activesupport/lib/active_support/inflector/inflections.rb, line 174
def human(rule, replacement)
  @humans.prepend([rule, replacement])
end
irregular(singular, plural) Показать исходный код

Указывает новое нерегулярное склонение, которое применяется к множественному и единственному числу одновременно. Это можно использовать только для строк, а не для регулярных выражений. Вы просто передаете нерегулярное склонение в форме единственного и множественного числа.

irregular 'octopus', 'octopi'
irregular 'person', 'people'
# File activesupport/lib/active_support/inflector/inflections.rb, line 128
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
plural(rule, replacement) Показать исходный код

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

# File activesupport/lib/active_support/inflector/inflections.rb, line 105
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 115
def singular(rule, replacement)
  @uncountables.delete(rule) if rule.is_a?(String)
  @uncountables.delete(replacement)
  @singulars.prepend([rule, replacement])
end
uncountable(*words) Показать исходный код

Добавляет слова, которые не должны склоняться.

uncountable 'money'
uncountable 'money', 'information'
uncountable %w( money information rice )
# File activesupport/lib/active_support/inflector/inflections.rb, line 162
def uncountable(*words)
  (@uncountables << words).flatten!
end

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

Spec-Zone.ru

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