Sha256: 1c8baa0a043eef8228ef6f618e605f99df24d870e5760a912ee658777a447d27

Contents?: true

Size: 940 Bytes

Versions: 3

Compression:

Stored size: 940 Bytes

Contents

# encoding: UTF-8
module MongoMapper
  module Plugins
    if defined?(ActiveSupport::DescendantsTracker::DescendantsArray)
      DescendantsArray = ::ActiveSupport::DescendantsTracker::DescendantsArray
    else
      DescendantsArray = ::Array
    end

    def self.direct_descendants_hash
      @direct_descendants_hash ||= Hash.new { |h,k| h[k] = DescendantsArray.new }
    end

    def plugins
      @plugins ||= []
    end

    def plugin(mod)
      raise ArgumentError,  "Plugins must extend ActiveSupport::Concern" unless ActiveSupport::Concern === mod
      include mod
      direct_descendants.each {|model| model.send(:include, mod) }
      plugins << mod
    end

    def direct_descendants
      Plugins.direct_descendants_hash[self]
    end

    def included(base = nil)
      direct_descendants << base if base
      super
    end

    def inherited(subclass)
      direct_descendants << subclass
      super
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
mongo_mapper-0.17.0 lib/mongo_mapper/plugins.rb
mongo_mapper-0.16.0 lib/mongo_mapper/plugins.rb
mongo_mapper-0.15.6 lib/mongo_mapper/plugins.rb