Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > Ruby > get modules that are in a class?

Reply
Thread Tools

get modules that are in a class?

 
 
Aaron Smith
Guest
Posts: n/a
 
      07-08-2007
is it possible to find out what modules have been included inside of a
class?

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

 
Reply With Quote
 
 
 
 
Chris Shea
Guest
Posts: n/a
 
      07-08-2007
On Jul 7, 8:00 pm, Aaron Smith <(E-Mail Removed)> wrote:
> is it possible to find out what modules have been included inside of a
> class?
>
> --
> Posted viahttp://www.ruby-forum.com/.


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

 
Reply With Quote
 
 
 
 
Aaron Smith
Guest
Posts: n/a
 
      07-08-2007
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...e.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

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

 
Reply With Quote
 
Travis D Warlick Jr
Guest
Posts: n/a
 
      07-08-2007
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...e.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)

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

 
Reply With Quote
 
Aaron Smith
Guest
Posts: n/a
 
      07-08-2007
> 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.

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

 
Reply With Quote
 
dblack@wobblini.net
Guest
Posts: n/a
 
      07-08-2007
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...e.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)

 
Reply With Quote
 
vasudevram
Guest
Posts: n/a
 
      07-08-2007

>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




 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
problem in running a basic code in python 3.3.0 that includes HTML file Satabdi Mukherjee Python 1 04-04-2013 07:48 PM
Disabling modules using Modules/Setup Ben Weintraub Python 0 09-09-2006 12:04 AM
Importing modules from within other modules Tobiah Python 2 09-14-2003 09:18 PM
imputils - import problem modules from sys.modules Remy Cool Python 1 08-27-2003 02:25 PM



Advertisments