2010-10-25 2 views
1

Ok je suis tellement en utilisant certains modules/lib/plugin (pas sûr du nom exact), disons que son une authentification/autorisation plugin comme: http://github.com/technoweenie/restful-authenticationEssayer de comprendre comment un contrôleur utilise un plug-in/Module

class HomeController < ApplicationController 


    some_module_name_here 


end 

Maintenant, juste en ajoutant le code ci-dessus 'some_module_name_here', je peux accéder aux méthodes de ce module.

Que fait cette ligne de code qui me donne accès aux méthodes/objets du module?

Est-ce que déclarer une variable comme dans exemple java/C#:

public SomeModule _someModule; 

Je sais que plugins/modules étendent essentiellement la classe sous les couvertures, mais comment fait-il cela avec une seule ligne de code?

Est-il appelé dans le constructeur en quelque sorte?

Répondre

4

Lorsque vous créez un plugin ruby ​​et que vous le chargez dans l'application rails via environment.rb, bundler ou un appel require, les méthodes sont chargées en tant que «modules» pouvant être appelés. Ceux qui agissent comme vous parlez auront une méthode supplémentaire appelée acts_as_list ou quelque chose de similaire. Toute cette méthode est inclure les méthodes du module dans la classe où cette ligne a été appelée.

Voici un exemple que vous pouvez inclure dans le dossier lib de votre application et jouer avec:

module Bellmyer 
    module Pointless 
    def self.included(base) 
     base.extend PointlessMethods 
    end 

    module PointlessMethods 
     def acts_as_pointless 
     unless included_modules.include? InstanceMethods 
      extend ClassMethods 
      include InstanceMethods 
     end 
     end 
    end 

    module ClassMethods 
     def pointless_class? 
     true 
     end 
    end 

    module InstanceMethods 
     def pointless_instance? 
     true 
     end 
    end 
    end 
end 

Le module est disponible à une classe rubis dans votre application, mais les méthodes ne soit pas chargé tant vous appelez acts_as_pointless, qui inclut ensuite et étend votre classe avec les méthodes répertoriées. Seule la méthode acts_as_pointless est immédiatement disponible pour le modèle. C'est le modèle standard pour un plugin ActiveRecord.

2

Ce n'est pas comme ça que ça fonctionne. Lorsque le plugin ou la gemme est chargé, il ajoute une méthode de classe à, dans ce cas, ApplicationController nommée some_module_name

Lorsque vous appelez ces méthodes, un tas d'autres méthodes de classe et d'instance sont incluses.

Vérifiez votre bijou ou plugin préféré pour voir comment ils le font exactement.

Questions connexes