2010-10-25 4 views
1

Ok поэтому я использую некоторые модуль/Библиотека/плагин (не уверен, что точное имя), скажем Сво аутентификации/авторизации плагин, как: http://github.com/technoweenie/restful-authenticationПытаясь понять, как Контроллер использует плагин/модуль

class HomeController < ApplicationController 


    some_module_name_here 


end 

Теперь просто добавив код выше 'some_module_name_here', я могу получить доступ к методам из этого модуля.

Что это за строка кода, которая дает мне доступ к методам/объектам из модуля?

Это объявление переменной, как, скажем, Java/C#:

public SomeModule _someModule; 

Я знаю, что плагины/модули в основном расширить класс под одеялом, но как это сделать это с помощью одной строки кода?

Вызывается в конструкторе как-то?

ответ

4

Когда вы создаете плагин ruby ​​и загружаете его в приложение rails через вызов environment.rb, bundler или require, методы загружаются как «модули», которые могут быть вызваны. Те, которые действуют, как вы говорите, будут иметь дополнительный метод под названием acts_as_list или что-то подобное. Весь этот метод составляет : методы модуля в класс, где была вызвана эта строка.

Вот пример, который можно включить в Lib папки вашего приложения и играть с:

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 

Модуль доступен для любого класса рубина в вашем приложении, но методы не фактически не напиваться до вы вызываете acts_as_pointless, который затем включает и расширяет ваш класс с помощью перечисленных методов. Только модель acts_as_pointless сразу же доступна для модели. Это стандартный шаблон для плагина ActiveRecord.

2

Это не так, как это работает.

При загрузке плагина или драгоценного камня он добавляет метод класса, в данном случае ApplicationController с именем some_module_name. Когда вы вызываете эти методы, включается куча других методов класса и экземпляра.

Проверьте свой любимый драгоценный камень или плагин, чтобы увидеть, как они это делают.

Смежные вопросы