is it possible to find out what modules have been included inside of a
class?
···
--
Posted via http://www.ruby-forum.com/.
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"
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
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
On Jul 07, 2007, at 22:47 , Aaron Smith wrote:
What about within a class?
module TestModule
def say_something
puts "SOMETHING"
end
endclass Test
include TestModule
endt = 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"
What about within a class?
module TestModule
def say_something
puts "SOMETHING"
end
endclass Test
include TestModule
endt = 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
endclass Test
include TestModule
def modules
self.class.included_modules
end
endt = Test.new
puts t.modulesIf you need this exposed for all classes you can expose for the Object class:
class Object
def modules
self.class.included_modules
end
endDoes this help?
Without knowing what you're trying to accomplish further it's difficult to come up with an optimal solution
--
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"
What about within a class?
module TestModule
def say_something
puts "SOMETHING"
end
endclass Test
include TestModule
endt = Test.new
puts t.included_modulesRemember 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