Derivado de: Jay e Why , que também fornecem maneiras de tornar isso mais bonito.
self.create_class_method(method_name)
(class << self; self; end).instance_eval do
define_method method_name do
...
end
end
end
Atualização : da contribuição da VR abaixo; um método mais conciso (contanto que você defina apenas um método desta forma) que ainda é autônomo:
self.create_class_method(method_name)
(class << self; self; end).send(:define_method, method_name) do
...
end
end
mas note que usar send () para acessar métodos privados como define_method () não é necessariamente uma boa ideia (meu entendimento é que isso vai desaparecer no Ruby 1.9).
singleton_class.define_method