Dérivé de : Jay y Pourquoi qui proposent également des moyens de rendre le tout plus joli.
self.create_class_method(method_name)
(class << self; self; end).instance_eval do
define_method method_name do
...
end
end
end
Mise à jour Il s'agit d'une méthode plus concise (tant que vous ne définissez qu'une seule méthode de cette manière) qui reste autonome :
self.create_class_method(method_name)
(class << self; self; end).send(:define_method, method_name) do
...
end
end
mais notez que l'utilisation de send() pour accéder à des méthodes privées comme define_method() n'est pas nécessairement une bonne idée (d'après ce que j'ai compris, cette fonction disparaîtra dans Ruby 1.9).