Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

get modules that are in a class?

1 view
Skip to first unread message

Aaron Smith

unread,
Jul 7, 2007, 10:00:55 PM7/7/07
to
is it possible to find out what modules have been included inside of a
class?

--
Posted via http://www.ruby-forum.com/.

Chris Shea

unread,
Jul 7, 2007, 10:40:11 PM7/7/07
to

This appears to do the trick:

mvb:~ cms$ irb
001:0> class C
002:1> end
nil
003:0> C.ancestors.select {|a| a.class == Module}
[Wirble::Shortcuts, PP::ObjectMixin, Kernel]

You can tell I require wirble and pp in my irbrc.

HTH,
Chris

Aaron Smith

unread,
Jul 7, 2007, 10:47:23 PM7/7/07
to
Wayne E. Seguin wrote:

> On Jul 07, 2007, at 22:00 , Aaron Smith wrote:
>> is it possible to find out what modules have been included inside of a
>> class?
>
>
> Yes Aaron it is, via the method "included_modules"
>
> http://www.ruby-doc.org/core/classes/Module.html#M001697

What about within a class?

module TestModule
def say_something
puts "SOMETHING"
end
end

class Test
include TestModule
end

t = Test.new
puts t.included_modules

Travis D Warlick Jr

unread,
Jul 7, 2007, 11:10:00 PM7/7/07
to

Remember that when you include the module, you're including _all_ the
module's methods (including Module#included_modules)

So, use self.class to get the Class object of the current instance (this
will work from the included modules also), so you should be able to do:

self.class.included_modules

And a debugging efficiency tip: use the Array#sort method with the
Module#included_modules to sort the list of included modules for easier
viewing. I use this all the time in IRB. (This also works with
Class#methods and all the like)

irb(main):001:0> YourClass.methods.sort

--
Travis Warlick
Operis Systems, LLC
Lead Developer

Aaron Smith

unread,
Jul 7, 2007, 11:15:56 PM7/7/07
to
> And a debugging efficiency tip: use the Array#sort method with the
> Module#included_modules to sort the list of included modules for easier
> viewing. I use this all the time in IRB. (This also works with
> Class#methods and all the like)
>
> irb(main):001:0> YourClass.methods.sort

Thanks. That's perfect.

dbl...@wobblini.net

unread,
Jul 8, 2007, 7:32:49 AM7/8/07
to
Hi --

On Sun, 8 Jul 2007, Travis D Warlick Jr wrote:

> Aaron Smith wrote:
>> Wayne E. Seguin wrote:
>>> On Jul 07, 2007, at 22:00 , Aaron Smith wrote:
>>>> is it possible to find out what modules have been included inside of a
>>>> class?
>>>
>>> Yes Aaron it is, via the method "included_modules"
>>>
>>> http://www.ruby-doc.org/core/classes/Module.html#M001697
>>
>> What about within a class?
>>
>> module TestModule
>> def say_something
>> puts "SOMETHING"
>> end
>> end
>>
>> class Test
>> include TestModule
>> end
>>
>> t = Test.new
>> puts t.included_modules
>>
>
> Remember that when you include the module, you're including _all_ the
> module's methods (including Module#included_modules)

It's not exactly an inclusion thing. Class objects already respond to
#included_modules, because Class inherits from Module.

> So, use self.class to get the Class object of the current instance (this
> will work from the included modules also), so you should be able to do:
>
> self.class.included_modules

That will work with any object:

"".class.included_modules

etc. It's not dependent on your having included a module.


David

--
* Books:
RAILS ROUTING (new! http://www.awprofessional.com/title/0321509242)
RUBY FOR RAILS (http://www.manning.com/black)
* Ruby/Rails training
& consulting: Ruby Power and Light, LLC (http://www.rubypal.com)

vasudevram

unread,
Jul 8, 2007, 12:54:38 PM7/8/07
to

>YourClass.methods.sort

Yes, that's a useful trick. I use it all the time.
We can also make up many more such, with a bit of thought.

Another one I use a lot, when I think that some class is likely to
have a method with some substring in its name, is:

YourClass.methods.grep /substring/

e.g. : String.methods.grep /case/ # to find out what the String method
name to uppercase (or lowercase) a string, is called.
or
"".methods.grep /case/

Vasudev Ram
http://www.dancingbison.com
http://jugad.livejournal.com
http://sourceforge.net/projects/xtopdf


0 new messages