• [^] # Re: Pour ma part, je ne passerais pas par des classes mais par des mixin

    Posté par . En réponse au message Système de plugins. Évalué à 0.

    Je me suis inspiré de ce que tu m'as proposé avec les modules.
    Je sais pas si çà apporte grand chose en fait, j'ai repris le même principe que dans mon premier exemple pour accéder aux méthodes.

    # main.rb
    module IRC
     module BasePlugin
     # chaque classe qui inclut ce module
     # est automatiquement instanciée et stockée
     # dans Bot::plugins.
     def self.included(pl)
     Bot::plugins << pl.new
     end
     def exists?(msg)
     # vérifie si une méthode on<EVENT> existe
     # et l'exécute.
     meth = "on" + msg.command
     send(meth, msg) if respond_to?(meth)
     end
     end
     class Bot
     Message = Struct.new(:command)
     @@plugins = []
     def self.plugins
     @@plugins
     end
     def initialize
     Dir["./plugins/*.rb"].each { |pl| require pl }
     end
     def run(event)
     msg = Message.new(event)
     @@plugins.each do |pl|
     pl.exists?(msg)
     end
     end
     end
    end
    IRC::Bot.new.run("JOIN")
    IRC::Bot.new.run("PART")
    # plugin1.rb
    class Plugin1
     include IRC::BasePlugin
     def onJOIN(msg)
     puts msg.command
     end
    end

    En fait j'ai fait quasiment la même chose, au lieu d'hériter d'une classe, j'inclus un module.
    Je pense que je vais utiliser une classe toute simple comme base pour les plugins, çà me parait plus simple.