mirror of
https://github.com/github/rails.git
synced 2026-04-26 03:00:59 -04:00
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:
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user