From: Tobias DiPasquale Date: 2001-12-03T21:55:11+09:00 Subject: [ruby-talk:27345] not as easy as the last one... Hi all, Another question for the Ruby-omniscient ruby-talk ML folk! Joy!! Anyway, here's one a little more difficult than my last one (I think, anyway): is there a way for me to create methods in a class that can only be called by an object of another class? (not even itself or other objects of it's class) What I am trying to do is this: imagine that the SimpleObject class had two methods, called _inc and _dec. Now imagine that no instance on SimpleObject or any of it's descendents could fire those methods. Nor could any other living object in the current running program (or any) fire these methods, EXCEPT a singleton instance of another class, called Container, in which the instances of SimpleObject happen to be "contained". (pun intended; they are just housed in a hash inside Container) Here's an outline: class Container include Singleton def inc(obj) if obj.instance_methods.include?('_inc') && \ obj.kind_of?('SimpleObject') obj._inc # increment this object's ref count end end #inc #-------problem area----------- def caller_valid?(*args) # who knows what this method should take? # make sure that the Container instance is the calling object # or return false end #caller_valid? #------------------------------ end #Container c = Container.instance class SimpleObject def initialize @refCount = 0 end #initialize attr_reader :refCount def _inc refCount += 1 if c.caller_valid?(<>) end #_inc def _dec refCount -= 1 if c.caller_valid?(<>) end #_dec end #SimpleObject x = SimpleObject.new x._inc x.refCount # => 0 c.inc(x) x.refCount # => 1 Any chance of doing this? If not, anyone know of a workaround? Thanks in advance!! -- 0100001101000010010000110100011101110101 << Tobias DiPasquale >> -=[ Solaris Systems Administrator ]=- Villanova University ECE Dept. mailto: anany@ece.vill.edu -=[ Applications Engineering Consultant ]=- BCS Solutions, Inc. mailto: tdipasquale@bcssinc.com 0100001101000010010000110100011101110101