Spec-Zone.ru › Ruby on Rails 4.1

класс ActiveSupport::Multibyte::Chars

Родитель:
Объект
Включенные модули:

Chars позволяет вам работать с кодировкой UTF-8 в классе Ruby String прозрачно, без глубокого знания кодировок. Объект Chars принимает строку при инициализации и делегирует методы класса String безопасным для кодировки способом. Все обычные методы класса String также реализованы для прокси.

Методы класса String делегируются через объект Chars и могут быть вызваны через метод mb_chars. Методы, которые обычно возвращают объект String, теперь возвращают объект Chars, что позволяет цепочку вызовов методов.

'The Perfect String  '.mb_chars.downcase.strip.normalize # => "the perfect string"

Объекты Chars идеально взаимозаменяемы с объектами String, пока не выполняются явные проверки класса. Если определённые методы явно проверяют класс, вызовите to_s перед тем, как передавать объекты chars.

bad.explicit_checking_method 'T'.mb_chars.downcase.to_s

По умолчанию реализация Chars предполагает, что кодировка строки — UTF-8. Если вам нужно обработать разные кодировки, вы можете написать свой обработчик многобайтовых строк и настроить его через ActiveSupport::Multibyte.proxy_class.

class CharsForUTF32
  def size
    @wrapped_string.size / 4
  end

  def self.accepts?(string)
    string.length % 4 == 0
  end
end

ActiveSupport::Multibyte.proxy_class = CharsForUTF32

Атрибуты

to_s[R]
to_str[R]
wrapped_string[R]

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

consumes?(string) Показать исходный код

Возвращает true если класс-прокси может обработать строку. Возвращает false в противном случае.

# File activesupport/lib/active_support/multibyte/chars.rb, line 75
def self.consumes?(string)
  string.encoding == Encoding::UTF_8
end
new(string) Показать исходный код

Создаёт новый экземпляр Chars, обернув строку.

# File activesupport/lib/active_support/multibyte/chars.rb, line 51
def initialize(string)
  @wrapped_string = string
  @wrapped_string.force_encoding(Encoding::UTF_8) unless @wrapped_string.frozen?
end

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

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

Преобразует первый символ в верхний регистр, а остальные — в нижний.

'über'.mb_chars.capitalize.to_s # => "Über"
# File activesupport/lib/active_support/multibyte/chars.rb, line 134
def capitalize
  (slice(0) || chars('')).upcase + (slice(1..-1) || chars('')).downcase
end
compose() Показать исходный код

Выполняет композицию над всеми символами.

'é'.length                       # => 3
'é'.mb_chars.compose.to_s.length # => 2
# File activesupport/lib/active_support/multibyte/chars.rb, line 170
def compose
  chars(Unicode.compose(@wrapped_string.codepoints.to_a).pack('U*'))
end
decompose() Показать исходный код

Выполняет каноническое разложение для всех символов.

'é'.length                         # => 2
'é'.mb_chars.decompose.to_s.length # => 3
# File activesupport/lib/active_support/multibyte/chars.rb, line 162
def decompose
  chars(Unicode.decompose(:canonical, @wrapped_string.codepoints.to_a).pack('U*'))
end
downcase() Показать исходный код

Преобразует символы в строке к нижнему регистру.

'VĚDA A VÝZKUM'.mb_chars.downcase.to_s # => "věda a výzkum"
# File activesupport/lib/active_support/multibyte/chars.rb, line 120
def downcase
  chars Unicode.downcase(@wrapped_string)
end
grapheme_length() Показать исходный код

Возвращает количество графемных кластеров в строке.

'क्षि'.mb_chars.length   # => 4
'क्षि'.mb_chars.grapheme_length # => 3
# File activesupport/lib/active_support/multibyte/chars.rb, line 178
def grapheme_length
  Unicode.unpack_graphemes(@wrapped_string).length
end
limit(limit) Показать исходный код

Ограничивает размер строки по количеству байтов без разрыва символов. Используется, когда хранилище строки ограничено по какой-либо причине.

'こんにちは'.mb_chars.limit(7).to_s # => "こん"
# File activesupport/lib/active_support/multibyte/chars.rb, line 106
def limit(limit)
  slice(0...translate_offset(limit))
end
method_missing(method, *args, &block) Показать исходный код

Перенаправляет все неопределенные методы на обернутую строку.

# File activesupport/lib/active_support/multibyte/chars.rb, line 57
def method_missing(method, *args, &block)
  result = @wrapped_string.__send__(method, *args, &block)
  if method.to_s =~ /!$/
    self if result
  else
    result.kind_of?(String) ? chars(result) : result
  end
end
normalize(form = nil) Показать исходный код

По умолчанию возвращает KC нормализацию строки. NFKC считается лучшей формой нормализации для передачи строк в базы данных и валидации.

  • form - Форма, которую вы хотите нормализовать. Должна быть одной из следующих: :c, :kc, :d, или :kd. По умолчанию ActiveSupport::Multibyte::Unicode#default_normalization_form

# File activesupport/lib/active_support/multibyte/chars.rb, line 154
def normalize(form = nil)
  chars(Unicode.normalize(@wrapped_string, form))
end
respond_to_missing?(method, include_private) Показать исходный код

Возвращает true если obj отвечает на указанный метод. Приватные методы включаются в поиск только если необязательный второй параметр равен true.

# File activesupport/lib/active_support/multibyte/chars.rb, line 69
def respond_to_missing?(method, include_private)
  @wrapped_string.respond_to?(method, include_private)
end
reverse() Показать исходный код

Инвертирует все символы в строке.

'Café'.mb_chars.reverse.to_s # => 'éfaC'
# File activesupport/lib/active_support/multibyte/chars.rb, line 97
def reverse
  chars(Unicode.unpack_graphemes(@wrapped_string).reverse.flatten.pack('U*'))
end
slice!(*args) Показать исходный код

Действует как String#slice!, но возвращает экземпляр Chars, или nil, если строка не была изменена.

# File activesupport/lib/active_support/multibyte/chars.rb, line 90
def slice!(*args)
  chars(@wrapped_string.slice!(*args))
end
split(*args) Показать исходный код

Работает точно так же, как и String#split, за исключением того, что элементы в результирующем списке являются экземплярами Chars вместо String. Это упрощает цепочку вызовов методов.

'Café périferôl'.mb_chars.split(/é/).map { |part| part.upcase.to_s } # => ["CAF", " P", "RIFERÔL"]
# File activesupport/lib/active_support/multibyte/chars.rb, line 84
def split(*args)
  @wrapped_string.split(*args).map { |i| self.class.new(i) }
end
swapcase() Показать исходный код

Преобразует символы в строке в противоположный регистр.

'El Cañón".mb_chars.swapcase.to_s # => "eL cAÑÓN"
# File activesupport/lib/active_support/multibyte/chars.rb, line 127
def swapcase
  chars Unicode.swapcase(@wrapped_string)
end
tidy_bytes(force = false) Показать исходный код

Заменяет все символы ISO-8859-1 или CP1252 их UTF-8 эквивалентами, в результате чего получается корректная UTF-8 строка.

Передача true принудительно отформатирует все байты, предполагая, что кодировка строки полностью CP1252 или ISO-8859-1.

# File activesupport/lib/active_support/multibyte/chars.rb, line 187
def tidy_bytes(force = false)
  chars(Unicode.tidy_bytes(@wrapped_string, force))
end
titlecase()
Псевдоним для: titleize
titleize() Показать исходный код

Преобразует первый символ каждого слова в верхний регистр, если это возможно.

"ÉL QUE SE ENTERÓ".mb_chars.titleize    # => "Él Que Se Enteró"
"日本語".mb_chars.titleize                 # => "日本語"
# File activesupport/lib/active_support/multibyte/chars.rb, line 142
def titleize
  chars(downcase.to_s.gsub(/\b('?\S)/u) { Unicode.upcase($1)})
end
Также алиас для: titlecase
upcase() Показать исходный код

Преобразует символы в строке в верхний регистр.

'Laurent, où sont les tests ?'.mb_chars.upcase.to_s # => "LAURENT, OÙ SONT LES TESTS ?"
# File activesupport/lib/active_support/multibyte/chars.rb, line 113
def upcase
  chars Unicode.upcase(@wrapped_string)
end

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

Spec-Zone.ru

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