From: dohzya Date: 2007-07-25T21:50:35+09:00 Subject: Re: Help: Get list of modules which are included in the class Le mercredi 25 juillet 2007 � 20:04 +0900, FireAphis a �crit : > There is another problem. If C2 doesn't inherit another class but does > include the modules and those modules by themselves include modules > then your code, still, will return the whole hierarchy. Look at this: > > module M1; end > module M2; include M1; end > class C2; include M2; end > > p (C2.ancestors - [C2] - C2.superclass.ancestors) # => [M1, M2] > > That's because C2.superclass => Object > > :( > > FireAphis You're right, but it can be fixed :) --- class Class def included_modules c = self all = c.ancestors - [c] bad = all.map {|a| a.ancestors - [a] } # Module#superclass doesn't exist bad << c.superclass if c.is_a? Class all - bad.flatten end end module M1; end module M2; include M1; end module M3; end module M4; include M3; end module M5; end module M6; include M5; end module M7; end class C1; include M2; end class C2 [M7, M6] --- sorry if I've sent 3 messages, I'm fighting with my mail client... -- Etienne