Module: ActiveSupport::CoreExtensions::String::Unicode

Included in:
String
Defined in:
lib/active_support/core_ext/string/unicode.rb,
lib/active_support/core_ext/string/unicode.rb

Overview

:nodoc:

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.append_features(base) ⇒ Object


7
8
9
10
11
12
# File 'lib/active_support/core_ext/string/unicode.rb', line 7

def self.append_features(base)
  if '1.8.7'.respond_to?(:chars)
    base.class_eval { remove_method :chars }
  end
  super
end

Instance Method Details

#charsObject

chars is a Unicode safe proxy for string methods. It creates and returns an instance of the ActiveSupport::Multibyte::Chars class which encapsulates the original string. A Unicode safe version of all the String methods are defined on this proxy class. Undefined methods are forwarded to String, so all of the string overrides can also be called through the chars proxy.

name = 'Claus Müller'
name.reverse              # => "rell??M sualC"
name.length               # => 13

name.chars.reverse.to_s   # => "rellüM sualC"
name.chars.length         # => 12

All the methods on the chars proxy which normally return a string will return a Chars object. This allows method chaining on the result of any of these methods.

name.chars.reverse.length # => 12

The Char object tries to be as interchangeable with String objects as possible: sorting and comparing between String and Char work like expected. The bang! methods change the internal string representation in the Chars object. Interoperability problems can be resolved easily with a to_s call.

For more information about the methods defined on the Chars proxy see ActiveSupport::Multibyte::Chars and ActiveSupport::Multibyte::Handlers::UTF8Handler.


38
39
40
# File 'lib/active_support/core_ext/string/unicode.rb', line 38

def chars
  ActiveSupport::Multibyte::Chars.new(self)
end

#is_utf8?Boolean

Returns true if the string has UTF-8 semantics (a String used for purely byte resources is unlikely to have them), returns false otherwise.

Returns:

  • (Boolean)

44
45
46
# File 'lib/active_support/core_ext/string/unicode.rb', line 44

def is_utf8?
  ActiveSupport::Multibyte::Handlers::UTF8Handler.consumes?(self)
end