Geekast : génération des signaux à la volée

Publié par fredix Dim 17 sept 2006 19:59:00 GMT

Certains le savent peut être, j’utilise les signaux de la Glib dans Geekast.

Il ne s’agit pas ici des signaux de GTK+, comme “clicked” déclenché sur le clic d’un bouton. Il s’agit de créer ses propres signaux pour ses besoins personnels. Des signaux applicatifs donc.

Ces signaux m’ont servi de base comme outil me permettant d’architecturer mon logiciel sur un modèle MVC. On peut voir ma documentation à ce sujet sur l’ancien wiki : Implémentation d’un motif de conception (pattern) MVC par signaux.

Même si cette approche est intéressante, elle était contraignante car il était nécessaire de définir tous les signaux dans la classe Signal ; créer son signal et la méthode associée, même si elle n’est pas utilisée.

J’ai finalement réussi à générer les signaux à la volée en utilisant plusieurs fonctionnalitées de Ruby, tel que le method_missing et le define_method qui permet d’ajouter une méthode à la classe d’un objet.

On peut voir ce que ça donne en comparant l’ancienne version de la classe, signal_old.org avec la nouvelle : signal.rb, ou via le diff.

Au niveau de l’usage, le code est peu impacté, mais il est nécessaire maintenant de donner en paramètre de la méthode connect, les types envoyés dans le block, exemple :

   def jabberBuffer
     @sig.connect("CjabberBuffer",['Integer','String','Time'])
         {|channel, buffer, time|
           puts "toto"
         }
   end

Ici on se connecte au signal CjabberBuffer. Ce signal reçoit 3 paramètres de type entier, chaîne et heure.

La méthode connect de la classe Sig n’existant pas, la méthode method_missing est appelée automatiquement. Celle-ci récupère les divers paramètres et le block de code envoyé. Elle créée la méthode du signal puis le signal lui même. Ensuite elle appelle la méthode lconnect qui connecte le block de code au signal créé.

Simple à utiliser. Même si le code de la classe Sig n’est peut être pas dans l’absolue très propre, il exploite certaines capacités excellentes de Ruby.

De plus il permet d’apporter au plus grand nombre l’usage des signaux. Cela pourra peut-être devenir une brique de base à un futur “framework”.

Trackbacks

Utilisez le lien ci-dessous pour envoyer un trackback depuis votre site:
http://frederic.logier.org/trackbacks?article_id=geekast-g%C3%A9n%C3%A9ration-des-signaux-%C3%A0-la-vol%C3%A9e&day=17&month=09&year=2006

Commentaires

laisser un commentaire

Commentaires