add ruby metaprogramming