Multibyte strings respond_to the String methods they proxy so they can be duck-typed. Closes #6549.

git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@6882 5ecf4fe2-1ee6-0310-87b1-e25e094e27de
This commit is contained in:
Jeremy Kemper 2007-05-28 23:33:54 +00:00
parent d8b67f7fe1
commit 428d1f67da
3 changed files with 16 additions and 1 deletions

View File

@ -1,5 +1,7 @@
*SVN*
* Multibyte strings respond_to the String methods they proxy so they can be duck-typed. #6549 [Tuxie]
* Array#to_xml yields the builder just like Hash and ActiveRecord::Base. #8472 [seth]
* Date, Time, and DateTime support formatting blocks in addition to strftime strings. Introduce :long_ordinal format, e.g. "February 21st, 2005". #8191 [Coda Hale]
@ -146,7 +148,7 @@
* Make String#chars slicing behaviour consistent with String. Closes #6387 [Manfred Stienstra]
* Pull in latest multibye patch. Closes #6346 [Manfred Stienstra]
* Pull in latest multibyte patch. Closes #6346 [Manfred Stienstra]
* Add ActiveSupport::Multibyte. Provides String#chars which lets you deal with strings as a sequence of chars, not of bytes. Closes #6242 [Julian Tarkhanov, Manfred Stienstra, Thijs van der Vossen & Jan Behrens]

View File

@ -41,6 +41,12 @@ module ActiveSupport::Multibyte #:nodoc:
@string
end
# Make duck-typing with String possible
def respond_to?(method)
super || @string.respond_to?(method) || handler.respond_to?(method) ||
(method.to_s =~ /(.*)!/ && handler.respond_to?($1)) || false
end
# Create a new Chars instance.
def initialize(str)
@string = str.respond_to?(:string) ? str.string : str

View File

@ -151,6 +151,13 @@ class CharsTest < Test::Unit::TestCase
end
end
def test_duck_typing
assert_equal true, 'test'.chars.respond_to?(:strip)
assert_equal true, 'test'.chars.respond_to?(:normalize)
assert_equal true, 'test'.chars.respond_to?(:normalize!)
assert_equal false, 'test'.chars.respond_to?(:a_method_that_doesnt_exist)
end
protected
def with_kcode(kcode)