Get modules that are in a class?

is it possible to find out what modules have been included inside of a
class?

···

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

Yes Aaron it is, via the method "included_modules"

http://www.ruby-doc.org/core/classes/Module.html#M001697

···

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?

--
Wayne E. Seguin
Sr. Systems Architect & Systems Admin
wayneseguin@gmail.com

Wayne E. Seguin 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"

class Module - RDoc Documentation

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

···

On Jul 07, 2007, at 22:00 , Aaron Smith wrote:

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

Aaron,

you can define a method within your class to expose this like so:

module TestModule
   def say_something
     puts "SOMETHING"
   end
end

class Test
   include TestModule
   def modules
     self.class.included_modules
   end
end

t = Test.new
puts t.modules

If you need this exposed for all classes you can expose for the Object class:

class Object
   def modules
     self.class.included_modules
   end
end

Does this help?
Without knowing what you're trying to accomplish further it's difficult to come up with an optimal solution :slight_smile:

···

On Jul 07, 2007, at 22:47 , Aaron Smith wrote:

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

--
Wayne E. Seguin
Sr. Systems Architect & Systems Admin
wayneseguin@gmail.com

Aaron Smith wrote:

Wayne E. Seguin 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"

class Module - RDoc Documentation

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

···

On Jul 07, 2007, at 22:00 , Aaron Smith wrote:

--
  Travis Warlick
  Operis Systems, LLC
  Lead Developer

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/\.

Aaron,

Scratch that last, it's far easier than that:

module TestModule
   def say_something
     puts "SOMETHING"
   end
end

class Test
   include TestModule
end

t = Test.new
puts t.class.included_modules

···

On Jul 07, 2007, at 23:06 , Wayne E. Seguin wrote:

Aaron,

you can define a method within your class to expose this like so:

module TestModule
  def say_something
    puts "SOMETHING"
  end
end

class Test
  include TestModule
  def modules
    self.class.included_modules
  end
end

t = Test.new
puts t.modules

If you need this exposed for all classes you can expose for the Object class:

class Object
  def modules
    self.class.included_modules
  end
end

Does this help?
Without knowing what you're trying to accomplish further it's difficult to come up with an optimal solution :slight_smile:

--
Wayne E. Seguin
Sr. Systems Architect & Systems Admin
wayneseguin@gmail.com

Hi --

Aaron Smith wrote:

Wayne E. Seguin 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"

class Module - RDoc Documentation

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

···

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

On Jul 07, 2007, at 22:00 , Aaron Smith wrote:

--
* 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)

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