Ruby introspection

Hi, this is my first blog post!, i’m already done of reading this artilce on groovy’s lang introspection , and i wanted to submit the equivalent one for ruby, so all you need now is to fire your irb and follow me :) :

# Whats is your class?
 
a = 5
b = "Hello"
 
# Whats is your class?
p "Class of a : #{a.class} ,class of b : #{b.class}" #=>"Class of a : Fixnum ,class of b : String"
 
# Whats is your super class?
p "Super class of a : #{a.class.superclass} ,super class of b : #{b.class.superclass}" #=>"Super class of a : Integer ,super class of b : Object"
 
# Is a.class = Fixnum ?
a.instance_of? Fixnum #=> true
 
# Is a of type Integer (does it have Integer in it's class hierarchy)?
a.is_a? Integer #=> true
 
# Or this way:
a.kind_of? Integer #=> true
 
# Introspection, know all the details about classes :
# List all ancestors(modules and classes) of a class
String.ancestors.each{|a| p a}
 
# List all modules included in a class
String.included_modules.each{|m| p m} 
 
# Check class hierarchy
String < Comparable #=> true
String < Integer #=> nil  , strings r not integers
Object < String #=> false , Not all objects are strings
 
# List ancestors of class type
String.ancestors.select{|a| a.class==Class}.each{|c| p c}
 
# List all methods available to an object
b.methods.each{|m| p m}
 
# Get public instance methods
String.public_instance_methods.each{|m| p m}
 
# Get protected instance methods
String.protected_instance_methods.each{|m| p m}
 
# Get private instance methods
String.private_instance_methods.each{|m| p m}
 
# Get class singleton methods
String.singleton_methods{|m| puts m}
 
# Get the instance variables of an object
d = Date.new
d.instance_variables.each{|i| p i}
 
# Get public instance methods
d.public_methods.each{|m| puts m}
 
# Get protected instance methods
d.protected_methods.each{|m| puts m}
 
# Get private instance methods
d.private_methods.each{|m| puts m}
 
# Get instance singleton methods
d.singleton_methods.each{|m| puts m}

As for the Dynamic method calling introduced in that article , check this post ;)

*Update : Check the second part article of ruby introspection, for more info on this topic.

This entry was posted in metaprogramming, Ruby and tagged , , . Bookmark the permalink.

One Response to Ruby introspection

  1. Pingback: Ruby and Metaprogramming - Khaled alHabache’s official blog

Leave a Reply

Your email address will not be published. Required fields are marked *

*

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre lang="" line="" escaped="" highlight="">