hi,

excuse me for the sourcelistings in this mail - i found it hard to explain
without 'em.

I have found a strange thing with Object#send in a little application I am
writing. I can't really figure out what is wrong. Could be drb related. Here
are the files:

-- the drb server (rbobjgw.rb --
require 'drb'

class RbObjGw
    undef :to_s
    undef :to_a
    undef :respond_to?
	undef :gets
	undef :getc

	attr_accessor :key

	def createObj(type, *args)
		obj = nil
		if args.empty?
			p type+".new"
			obj = eval(type+".new")
		else
			cmd = type+".new(*args)"
			obj = eval(cmd)
		end
		@key = type 
		8.times {|i|
			@key = @key + rand(9).to_s
		}
		$rbGwObjects[@key] = obj 
		@key
	end

	def destroyObj
		$rbGwObjects.delete(@key)
	end

	def method_missing(methId, *args, &block)
		obj = $rbGwObjects[@key]
		if args.empty?
			if block.nil?
				obj.send(methId)
			else
				obj.send(methId, &block)
			end
		else
			if block.nil?
				obj.send(methId, *args)
			else
				obj.send(methId, *args, &block)
			end
		end
	end
end


$rbGwObjects = Hash.new

DRb.start_service('druby://localhost:9000', RbObjGw.new)
DRb.thread.join

-- the local client handle object (rbobjhandle.rb) --
class RbObjGwHandle
    undef :to_s
    undef :to_a
    undef :respond_to?
	undef :gets
	undef :getc

	attr_reader :key, :gw

	def initialize(key, gw)
		@key = key
		@gw = gw
	end

	def method_missing(methId, *args, &block)
		print "key: #{@key} - gw: #{@gw} - id: #{methId}\n"
		@gw.key = @key
		if args.empty?
			if block.nil?
				@gw.send(methId)  # see comments below listings 
			else
				@gw.send(methId, &block)
			end
		else
			if block.nil?
				@gw.send(methId, *args)
			else
				@gw.send(methId, *args, &block)
			end
		end
	end
end

-- a small test --
require 'drb'
require 'rbobjgwhandle'

DRb.start_service

factory = DRbObject.new(nil, 'druby://localhost:9000')
io = RbObjGwHandle.new(factory.createObj("File", "/etc/passwd", "r"), factory)
s = io.gets
print "io: #{s}\n"
io.close
io.destroyObj
--------------------

some methods defined in Kernel seems to not correctly propagate via
method_missing. With the File class i have found that gets is such a method.
If i undef it in the drb object i am fine though which seems correct. But when 
gets is sent to the drb object it isn't propagated via method_missing for some
reason.

in the RbObjGwHandle#method_missing method where I placed the comment gets
just hangs. that is @gw.send(:gets) hangs, but if i change this to @gw.gets i
am alright. anyone have an explanation for this?

(please CC me since I am not on this list)

-- 
-----------------------------------------------------------.
Patrik Sundberg  email: ps / raditex.se || ps / radiac.mine.nu |
                 Phone: +46 13 178567 || +46 707 602240    |
.---> UNIX consultant                                      |
|-----> Applied Physics and Electrical Engineering student |
`----------------------------------------------------------'