lib/mongo_mapper/plugins.rb in mongo_mapper-0.8.6 vs lib/mongo_mapper/plugins.rb in mongo_mapper-0.9.0
- old
+ new
@@ -1,15 +1,28 @@
# encoding: UTF-8
module MongoMapper
module Plugins
+ include ActiveSupport::DescendantsTracker
+
def plugins
@plugins ||= []
end
def plugin(mod)
- extend mod::ClassMethods if mod.const_defined?(:ClassMethods)
- include mod::InstanceMethods if mod.const_defined?(:InstanceMethods)
- mod.configure(self) if mod.respond_to?(:configure)
+ if ActiveSupport::Concern === mod
+ include mod
+ else
+ warn "[DEPRECATED] Plugins must extend ActiveSupport::Concern"
+ extend mod::ClassMethods if mod.const_defined?(:ClassMethods)
+ include mod::InstanceMethods if mod.const_defined?(:InstanceMethods)
+ mod.configure(self) if mod.respond_to?(:configure)
+ end
+ direct_descendants.each {|model| model.send(:include, mod) }
plugins << mod
+ end
+
+ def included(base = nil, &block)
+ direct_descendants << base if base
+ super
end
end
end