Precisa do #define_singleton_method no Ruby 1.8.7?

Recentemente, descobri que precisava de #define_singleton_methodum projeto que ainda está rodando Ruby 1.8.7 – sim, sim, eu sei … Mas não sou o único. Claro, se for no contexto de um aplicativo Ruby on Rails, a equipe principal foi legal o suficiente para fazer back-port Object#singleton_classpara lidar com situações como essa. Porém, fora de uma aplicação Rails, você ainda pode precisar de algo para obter a classe singleton (ou metaclasse , se você preferir essa terminologia).

Felizmente, as classes abertas de Ruby nos permitem trabalhar um pouco de mágica assim:

class Object
def singleton_class
class << self; self; end
end
end

E voila! Agora você pode fazer algo assim:

some_object.singleton_class.send :define_method, :method_name { method.body }

Boa codificação!