# Module#nesting (NOT the class method - instance method)

**URL:** <https://www.ruby-forum.com/t/module-nesting-not-the-class-method-instance-method/84542>\
**Category:** Ruby\
**Created:** [February 5, 2007, 9:24pm UTC](https://www.ruby-forum.com/t/module-nesting-not-the-class-method-instance-method/84542 "2007-02-05T21:24:11Z")\
**Posts on this page:** 2\
**Page:** 1

<div class="post-metadata">

**Author:** ![unknown](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/u/4bbf92/32.png) [@unknown](https://www.ruby-forum.com/u/unknown)\
**Post date:** [February 5, 2007, 9:24pm UTC](https://www.ruby-forum.com/t/module-nesting-not-the-class-method-instance-method/84542/1 "2007-02-05T21:24:11Z")

</div>

harp:~ \> cat a.rb  
class Module  
def nesting  
parent, child = nil  
name.split(’::’).inject(Object){|parent, child| parent.const\_get  
child}  
Object == parent ? nil : parent  
end  
end

class A  
class B  
class C  
class D  
end  
end  
end  
end

p A.nesting  
p A::B.nesting  
p A:🅱:C.nesting  
p A:🅱:C::D.nesting

harp:~ \> ruby a.rb  
nil  
A  
A::B  
A:🅱:C

-a

---

<div class="post-metadata">

**Author:** ![unknown](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/u/4bbf92/32.png) [@unknown](https://www.ruby-forum.com/u/unknown)\
**Post date:** [February 5, 2007, 11:54pm UTC](https://www.ruby-forum.com/t/module-nesting-not-the-class-method-instance-method/84542/2 "2007-02-05T23:54:33Z")

</div>

On Feb 5, 3:23 pm, removed\_email\_address@domain.invalid wrote:

> ```
> class B
> 
> ```
> 
> p A:🅱:C::D.nesting
> 
> harp:~ \> ruby a.rb  
> nil  
> A  
> A::B  
> A:🅱:C

irb(main):001:0\> require ‘facets/core/module/nesting’  
=\> true  
irb(main):002:0\> class A  
irb(main):003:1\> class B  
irb(main):004:2\> class C  
irb(main):005:3\> class D  
irb(main):006:4\> end  
irb(main):007:3\> end  
irb(main):008:2\> end  
irb(main):009:1\> end  
=\> nil  
irb(main):010:0\> A.nesting  
=\> [A]  
irb(main):011:0\> B.nesting  
NameError: uninitialized constant B  
from (irb):11  
from :0  
irb(main):012:0\> A::B.nesting  
=\> [A, A::B]  
irb(main):013:0\> A:🅱:C.nesting  
=\> [A, A::B, A:🅱:C]  
irb(main):014:0\> A:🅱:C::D.nesting  
=\> [A, A::B, A:🅱:C, A:🅱:C::D]

class Module  
def nesting  
n = []  
name.split(/::/).inject(self){ |mod, name| c =  
mod.const\_get(name) ; n \<\< c ; c }  
return n  
end  
end

T.
