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:
parent
d8b67f7fe1
commit
428d1f67da
|
@ -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]
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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)
|
||||
|
|
Loading…
Reference in New Issue