From: ara.t.howard@... Date: 2007-02-14T06:39:26+09:00 Subject: Re: Dynamically determining a class' namespace ---1400102478-954385260-1171402764=:18133 Content-Type: MULTIPART/MIXED; BOUNDARY="-1400102478-954385260-1171402764=:18133" This message is in MIME format. The first part should be readable text, while the remaining parts are likely unreadable without MIME-aware tools. ---1400102478-954385260-1171402764=:18133 Content-Type: TEXT/PLAIN; charset=US-ASCII; format=flowed On Wed, 14 Feb 2007, Tim Pease wrote: > On 2/13/07, ara.t.howard@noaa.gov wrote: >> On Wed, 14 Feb 2007, Daniel Berger wrote: >> >> > Hi all, >> > >> > Ruby 1.8.x >> > >> > Is there a way to determine a classes namespace from within an >> > instance method? >> > >> > class Foo >> > def initialize >> > # print namespace >> > end >> > end >> > >> > Foo.new # 'Object'? 'Kernel'? nil? >> > >> > module Bar >> > Foo.new # 'Bar' >> > end >> > >> > module Baz >> > module Bar >> > Foo.new # 'Baz::Bar' >> > end >> > end >> > >> > If not, is it possible at the class level? I looked at Module#nesting >> > and Module#name, but I couldn't see how to use those to get what I >> > want. >> > >> > Thanks, >> > >> > Dan >> > >> > >> >> http://groups.google.com/group/comp.lang.ruby/browse_frm/thread/964c11aefa515b29/c1fb423d3dcda20e?lnk=gst&q=a.rb+nesting&rnum=2&hl=en#c1fb423d3dcda20e >> > > Not quite what Mr. Berger is after here. > > He wants to know the nesting where the Foo object was created not the > nesting of the Foo class itself. i.e. whenever Foo.new is called, > what is the namespace where it was called. > > Frankly, I'm stumped. > harp:~ > cat a.rb require 'binding_of_caller' class Foo def self.new Binding.of_caller{|b| p eval('Module.nesting', b).shift } end end Foo.new # 'Object'? 'Kernel'? nil? module Bar Foo.new # 'Bar' end module Baz module Bar Foo.new # 'Baz::Bar' end end harp:~ > ruby a.rb nil Bar Baz::Bar -a -- we can deny everything, except that we have the possibility of being better. simply reflect on that. - the dalai lama ---1400102478-954385260-1171402764=:18133 Content-Type: TEXT/PLAIN; charset=US-ASCII; name=binding_of_caller.rb Content-Transfer-Encoding: BASE64 Content-ID: Content-Description: Content-Disposition: attachment; filename=binding_of_caller.rb YmVnaW4NCiAgcmVxdWlyZSAnc2ltcGxlY2MnDQpyZXNjdWUgTG9hZEVycm9y DQogIGRlZiBDb250aW51YXRpb24uY3JlYXRlKCphcmdzLCAmYmxvY2spDQog ICAgY2MgPSBuaWw7IHJlc3VsdCA9IGNhbGxjYyB7fGN8IGNjID0gYzsgYmxv Y2suY2FsbChjYykgaWYgYmxvY2sgYW5kIGFyZ3MuZW1wdHk/fQ0KICAgIHJl c3VsdCB8fD0gYXJncw0KICAgIHJldHVybiAqW2NjLCAqcmVzdWx0XQ0KICBl bmQNCmVuZA0KDQojIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIGJpbmRpbmcg b2YgdGhlIG1ldGhvZCB0aGF0IGNhbGxlZCB5b3VyDQojIG1ldGhvZC4gSXQg d2lsbCByYWlzZSBhbiBFeGNlcHRpb24gd2hlbiB5b3UncmUgbm90IGluc2lk ZSBhIG1ldGhvZC4NCiMNCiMgSXQncyB1c2VkIGxpa2UgdGhpczoNCiMgICBk ZWYgaW5jX2NvdW50ZXINCiMgICAgIEJpbmRpbmcub2ZfY2FsbGVyIGRvIHxi aW5kaW5nfA0KIyAgICAgICBldmFsKCJjb3VudGVyICs9IDEiLCBiaW5kaW5n KQ0KIyAgICAgZW5kDQojICAgZW5kDQojICAgY291bnRlciA9IDANCiMgICAy LnRpbWVzIHsgaW5jX2NvdW50ZXIgfQ0KIyAgIGNvdW50ZXIgIyA9PiAyDQoj DQojIFlvdSB3aWxsIGhhdmUgdG8gcHV0IHRoZSB3aG9sZSByZXN0IG9mIHlv dXIgbWV0aG9kIGludG8gdGhlDQojIGJsb2NrIHRoYXQgeW91IHBhc3MgaW50 byB0aGlzIG1ldGhvZC4gSWYgeW91IGRvbid0IGRvIHRoaXMNCiMgYW4gRXhj ZXB0aW9uIHdpbGwgYmUgcmFpc2VkLiBCZWNhdXNlIG9mIHRoZSB3YXkgdGhh dCB0aGlzIGlzDQojIGltcGxlbWVudGVkIGl0IGhhcyB0byBiZSBkb25lIHRo aXMgd2F5LiBJZiB5b3UgZG9uJ3QgZG8gaXQNCiMgbGlrZSB0aGlzIGl0IHdp bGwgcmFpc2UgYW4gRXhjZXB0aW9uLg0KZGVmIEJpbmRpbmcub2ZfY2FsbGVy KCZibG9jaykNCiAgb2xkX2NyaXRpY2FsID0gVGhyZWFkLmNyaXRpY2FsDQog IFRocmVhZC5jcml0aWNhbCA9IHRydWUNCiAgY291bnQgPSAwDQogIGNjLCBy ZXN1bHQsIGVycm9yLCBleHRyYV9kYXRhID0gQ29udGludWF0aW9uLmNyZWF0 ZShuaWwsIG5pbCkNCiAgZXJyb3IuY2FsbCBpZiBlcnJvcg0KDQogIHRyYWNl ciA9IGxhbWJkYSBkbyB8KmFyZ3N8DQogICAgdHlwZSwgY29udGV4dCwgZXh0 cmFfZGF0YSA9IGFyZ3NbMF0sIGFyZ3NbNF0sIGFyZ3MNCiAgICBpZiB0eXBl ID09ICJyZXR1cm4iDQogICAgICBjb3VudCArPSAxDQogICAgICAjIEZpcnN0 IHRoaXMgbWV0aG9kIGFuZCB0aGVuIGNhbGxpbmcgb25lIHdpbGwgcmV0dXJu IC0tDQogICAgICAjIHRoZSB0cmFjZSBldmVudCBvZiB0aGUgc2Vjb25kIGV2 ZW50IGdldHMgdGhlIGNvbnRleHQNCiAgICAgICMgb2YgdGhlIG1ldGhvZCB3 aGljaCBjYWxsZWQgdGhlIG1ldGhvZCB0aGF0IGNhbGxlZCB0aGlzDQogICAg ICAjIG1ldGhvZC4NCiAgICAgIGlmIGNvdW50ID09IDINCiAgICAgICAgIyBJ dCB3b3VsZCBiZSBuaWNlIGlmIHdlIGNvdWxkIHJlc3RvcmUgdGhlIHRyYWNl X2Z1bmMNCiAgICAgICAgIyB0aGF0IHdhcyBzZXQgYmVmb3JlIHdlIHN3YXBw ZWQgaW4gb3VyIG93biBvbmUsIGJ1dA0KICAgICAgICAjIHRoaXMgaXMgaW1w b3NzaWJsZSB3aXRob3V0IG92ZXJsb2FkaW5nIHNldF90cmFjZV9mdW5jDQog ICAgICAgICMgaW4gY3VycmVudCBSdWJ5Lg0KICAgICAgICBzZXRfdHJhY2Vf ZnVuYyhuaWwpDQogICAgICAgIGNjLmNhbGwoZXZhbCgiYmluZGluZyIsIGNv bnRleHQpLCBuaWwsIGV4dHJhX2RhdGEpDQogICAgICBlbmQNCiAgICBlbHNp ZiB0eXBlICE9ICJsaW5lIg0KICAgICAgc2V0X3RyYWNlX2Z1bmMobmlsKQ0K ICAgICAgZXJyb3JfbXNnID0gIkJpbmRpbmcub2ZfY2FsbGVyIHVzZWQgaW4g bm9uLW1ldGhvZCBjb250ZXh0IG9yICIgKw0KICAgICAgICAidHJhaWxpbmcg c3RhdGVtZW50cyBvZiBtZXRob2QgdXNpbmcgaXQgYXJlbid0IGluIHRoZSBi bG9jay4iDQogICAgICBjYy5jYWxsKG5pbCwgbGFtYmRhIHsgcmFpc2UoQXJn dW1lbnRFcnJvciwgZXJyb3JfbXNnKSB9LCBuaWwpDQogICAgZW5kDQogIGVu ZA0KDQogIHVubGVzcyByZXN1bHQNCiAgICBzZXRfdHJhY2VfZnVuYyh0cmFj ZXIpDQogICAgcmV0dXJuIG5pbA0KICBlbHNlDQogICAgVGhyZWFkLmNyaXRp Y2FsID0gb2xkX2NyaXRpY2FsDQogICAgY2FzZSBibG9jay5hcml0eQ0KICAg ICAgd2hlbiAxIHRoZW4geWllbGQocmVzdWx0KQ0KICAgICAgZWxzZSB5aWVs ZChyZXN1bHQsIGV4dHJhX2RhdGEpICAgICAgICANCiAgICBlbmQNCiAgZW5k DQplbmQNCg== ---1400102478-954385260-1171402764=:18133-- ---1400102478-954385260-1171402764=:18133--