Derivado de: Jay and Why , quienes también brindan formas de hacer esto más bonito.
self.create_class_method(method_name)
(class << self; self; end).instance_eval do
define_method method_name do
...
end
end
end
Actualización : de la contribución de VR a continuación; un método más conciso (siempre que solo esté definiendo un método de esta manera) que aún es independiente:
self.create_class_method(method_name)
(class << self; self; end).send(:define_method, method_name) do
...
end
end
pero tenga en cuenta que usar send () para acceder a métodos privados como define_method () no es necesariamente una buena idea (tengo entendido que desaparecerá en Ruby 1.9).
singleton_class.define_method