From: Rick DeNatale Date: 2007-03-31T08:23:39+09:00 Subject: Re: Find the fully qualified name of a class from a string On 3/30/07, ara.t.howard@noaa.gov wrote: > On Sat, 31 Mar 2007, Nasir Khan wrote: > > > Say you have a class definition in a string - > > > > str = < > module A > > class B > > def b > > puts "hello" > > end > > end > > end > > EOF > > > > What is the easiest way to find out the fully qualified name of the class > > there, namely "A::B" > > > > Now I could do a thing like > > > > module EmptyModule > > end > > > > EmptyModule.module_eval(str) > > > > def self.find_class mod > > mod.constants.each do |str| > > m = mod.const_get(str) > > if m.class == Module > > find_class(m) > > else > > cname = m.to_s > > puts cname.match(/EmptyModule::/).post_match > > break > > end > > end > > end > > > > and call this method > > > > find_class(EmptyModule) > > > > which prints "A::B" > > > > This works but it seems too much work to do something simple. > > > > Is there a better/simpler way to do this? > > > > Thanks > > Nasir > > harp:~ > cat a.rb > # > # a better const_get > # > def constant_get(hierachy) > ancestors = hierachy.split(%r/::/) > parent = Object > while((child = ancestors.shift)) > klass = parent.const_get child > parent = klass > end > klass > end > > c = constant_get 'A::B' I don't think that's what he's looking for. He has a string containing Ruby source code which presumably defines a class (or classes?) which might be contained within a module. He want's to find the fully qualified name of this unknown class (or classes?). The A::B is really just an example. WHY he wants to do this is beyond me. -- Rick DeNatale My blog on Ruby http://talklikeaduck.denhaven2.com/