Metaprogramming RUBY, chapter 3