diff --git a/lib/drb/drb.rb b/lib/drb/drb.rb index 9b4d675096..5c7f66ac16 100644 --- a/lib/drb/drb.rb +++ b/lib/drb/drb.rb @@ -1606,15 +1606,9 @@ module DRb # Coerce an object to a string, providing our own representation if # to_s is not defined for the object. def any_to_s(obj) - obj.to_s + ":#{obj.class}" + "#{obj}:#{obj.class}" rescue - case obj - when Object - klass = obj.class - else - klass = Kernel.instance_method(:class).bind(obj).call - end - sprintf("#<%s:0x%dx>", klass, obj.__id__) + Kernel.instance_method(:to_s).bind_call(obj) end # Check that a method is callable via dRuby. diff --git a/test/drb/test_drb.rb b/test/drb/test_drb.rb index b4399573aa..15e40ac596 100644 --- a/test/drb/test_drb.rb +++ b/test/drb/test_drb.rb @@ -327,6 +327,20 @@ class TestBug4409 < Test::Unit::TestCase end end +class TestDRbAnyToS < Test::Unit::TestCase + class BO < BasicObject + end + + def test_any_to_s + server = DRb::DRbServer.new('druby://:0') + server.singleton_class.send(:public, :any_to_s) + assert_equal("foo:String", server.any_to_s("foo")) + assert_match(/\A#\z/, server.any_to_s(BO.new)) + server.stop_service + server.thread.join + end +end + class TestDRbTCP < Test::Unit::TestCase def test_immediate_close server = DRb::DRbServer.new('druby://:0')