J'ai une classe avec quelques méthodes. C'est supersekret mais j'ai reproduit ce que je peux ici.Quelle est la meilleure stratégie pour obtenir/définir des métadonnées sur les méthodes Ruby à l'exécution?
Class RayGun
# flashes red light
# requires confirmation
# makes "zowowowowowow" sound
def stun!
# ...
end
# flashes blue light
# does not require confirmation
# makes "trrrtrtrtrrtrtrtrtrtrtr" sound
def freeze!
# ...
end
# doesn't flash any lights
# does not require confirmation
# makes Windows startup sound
def killoblast!
# ...
end
end
Je veux être en mesure, lors de l'exécution, interroger la classe sur l'une des méthodes et recevoir un comme hachage ou struct si:
{:lights => 'red', :confirmation => false, :sound => 'windows'}
Quelle est la meilleure façon de le faire? Évidemment, vous pourriez avoir un fichier YAML séparé à côté et mettre en place une convention pour relier les deux, mais idéalement, je veux du code et des métadonnées en un seul endroit.
L'idée la plus prometteuse que je peux venir avec quelque chose comme ceci:
class RayGun
cattr_accessor :metadata
def self.register_method(hsh)
define_method(hsh.name, hsh.block)
metadata[hsh[:name]] = hsh
end
register_method({
:name => 'stun!',
:lights => 'red',
:confirmation => 'true',
:sound => 'zowowo',
:block => Proc.new do
# code goes here
})
# etc.
end
Quelqu'un at-il des meilleures idées? Suis-je aboyer un arbre très mauvais?
method_added peut être non documenté sur rdoc, mais c'est sur une documentation liée par le site officiel: http://www.ruby-doc.org/docs/ProgrammingRuby /html/ospace.html –