Когда вы создаете плагин 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
Модуль доступен для любого класса ruby в вашем приложении, но методы фактически не загружаются, пока вы не вызовете acts_as_pointless
, который затем включает и расширяет ваш класс перечисленными методами. Только метод acts_as_pointless
сразу доступен для модели. Это стандартный шаблон для плагина ActiveRecord.