Dynamically determining a class' namespace

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

On Wed, 14 Feb 2007, Daniel B. wrote:

end
Foo.new # ‘Baz::Bar’

http://groups.google.com/group/comp.lang.ruby/browse_frm/thread/964c11aefa515b29/c1fb423d3dcda20e?lnk=gst&q=a.rb+nesting&rnum=2&hl=en#c1fb423d3dcda20e

-a

On 2/13/07, [email protected] [email protected] wrote:

def initialize
module Baz

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.

TwP

On Wed, 14 Feb 2007, Tim P. wrote:

class Foo

Thanks,
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

On Wed, 14 Feb 2007, Tim P. wrote:

require ‘binding_of_caller’

Okay, Ara is there any problem that you have not already solved :wink:

TwP

gotta give credit where it’s due: that’s florian’s work.

-a

On 2/13/07, [email protected] [email protected] wrote:

instance method?
Foo.new # ‘Bar’
want.
Not quite what Mr. Berger is after here.

Okay, Ara is there any problem that you have not already solved :wink:

TwP

On Wed, Feb 14, 2007 at 06:39:26AM +0900, [email protected] wrote:

  Binding.of_caller{|b| p eval('Module.nesting', b).shift }
module Bar
   Foo.new # 'Baz::Bar'
end

end

harp:~ > ruby a.rb
nil
Bar
Baz::Bar

$ ruby -v a.rb
ruby 1.8.5 (2006-08-25) [i686-linux]
nil
nil
nil

(Foo with 1.8.5-p12)

1.8.5 killed Binding.of_caller, take a look at ruby-debug
http://rubyforge.org/projects/ruby-debug/.