aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--lib/drb/drb.rb10
-rw-r--r--test/drb/test_drb.rb14
2 files changed, 16 insertions, 8 deletions
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#<DRbTests::TestDRbAnyToS::BO:0x[0-9a-f]+>\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')