All Posts in “Ruby”

Ruby reflection

If you are here, then most probably you want to know more about ruby reflection interface. Well that’s true, but I always find myself in need to explain few things before I get started with my posts, and this time I find myself in need of explaining few things related to ruby’s OOP.

I’m pretty sure that you always heard that “in ruby: everything is an object.” , but have you ever thought of that carefully?
The first thing that comes to a one’s mind is something like :

But have you thought of your class as an object? Well that seems odd, but that’s how ruby works:

What does the above snippet of code mean exactly?
It means 2 things : Foo is a constant and that constant holds(refers to) an object of Class type.

Let me prove that 2 you:

As you can see, I got a warning because I tried to initialize the constant Foo again.

So ,when you define some class ‘Foo’ in ruby, all you are doing is:
1-instantiating an object of type Class.
2-initializing a constant Foo that refers to that created object .

So bear in mind that when I say “object” ,then I do mean any object; an object of Class type, or any object of any type.

Now, let’s move to another point. What about the ‘Singleton Class’, did you have the chance to work with it before?
Simply it’s the class that holds all singleton methods of an object, whether it’s a class object , or any other object.

Let’s start by defining 2 class methods (a class method is nothing but: a singleton method of an object of Class type) :

You could also have written that in this way:

The above inner class mentioned with “class << self" is what we call : a singleton class. Let's define a method that returns back the singleton class for us :

Now try this :

As you can see, the singleton class is the class that holds all singleton methods. We will use the singleton class later in this series, so keep the concept in mind. Let's now get back to our topic on ruby's reflection api , i will introduce 3 methods in this post: eval , instance_eval and class_eval.


‘eval’ is a method that evaluates a ruby string :

eval can also work in the scope of bindings ; a binding is an object that encapsulates the execution context at some particular place in the code and retain this context for future use. Look at this example of using bindings with eval :

Also can work with proc objects :


This method works in the context of the object :

And could be used to define singleton methods :

you can pass it a block instead of the string :


Evaluates a string or a block in the context of the receiver

And it defines instance methods when called on some object

And as instance_eval, a block instead of the string could be passed

You can use class_eval to dynamically use private methods, for example to use the private method ‘include’:

Now let’s make use of our knowledge,let’s try to redefine the attr_accessor method in our way, I will make a similar method called attr_access :

in a similar way we can define class attribute accessors :

Or with we can use the singleton class :

And in both cases we can do :

Give it a try and try to define attr_reader and attr_writer for both object and class variables.

I think it’s enough for this post, the next post will contain more methods to look at. See you then.

Update 1: fixing some typos.
Update 2: second part is here.

Ruby introspection 2

I wanted to start blogging on ruby reflection api, but i just realized that i have to give a second part of my previous article on ruby introspection .
So here we go:

Also i strongly recommend that you look at the ObjectSpace module which contains a number of routines that interact with the garbage collection facility and allow you to traverse all living objects with an iterator, however this is a little example taken from the official api documentation :

Also if you feel like you are eager to see low level introspection , then check this great post.

In my next article, am going to blog on ruby reflection api , hope to finish it soon 😉

Ruby dynamic method calling

I’m pretty sure that you have heard lots about ruby, specially as being a dynamic language, you can create methods on the fly, add instance variables, define constants and invoke existing methods dynamically , and that’s what this post is all about :

As you know in ruby you can call a public instance method directly ,ex :

One way to invoke a method dynamically in ruby is to send a message to the object :

A second way is instantiate a method object and then call it:

And the third way is to use the eval method:

Well, when to use what?

look at this script, it will be used to benchmark the 3 ways of calling :

Well as you can see, instantiating a method object is the fastest dynamic way in calling a method, also notice how slow using eval is.

Also when sending a message to an object , or when instantiating a method object , u can call private methods of that object :

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 🙂 :

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.