Sha256: 4a7f9c80deba46d7b2e0c6471c7badd1b7eb04cc47ac8273f99248a9dbddafd6

Contents?: true

Size: 864 Bytes

Versions: 5

Compression:

Stored size: 864 Bytes

Contents

module Nanoc
  class PluginManager

    @@data_sources       = {}
    @@filters            = {}
    @@layout_processors  = {}

    def self.subclasses_of(superclass)
      subclasses = []
      ObjectSpace.each_object(Class) { |subclass| subclasses << subclass if subclass < superclass }
      subclasses
    end

    def self.data_source_named(name)
      @@data_sources[name.to_sym] ||= subclasses_of(DataSource).find do |klass|
        klass.identifiers.include?(name.to_sym)
      end
    end

    def self.filter_named(name)
      @@filters[name.to_sym] ||= subclasses_of(Filter).find do |klass|
        klass.identifiers.include?(name.to_sym)
      end
    end

    def self.layout_processor_for_extension(ext)
      @@filters[ext.to_sym] ||= subclasses_of(LayoutProcessor).find do |klass|
        klass.extensions.include?(ext)
      end
    end

  end
end

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
nanoc-2.0.2 lib/nanoc/base/plugin_manager.rb
nanoc-2.0.4 lib/nanoc/base/plugin_manager.rb
nanoc-2.0 lib/nanoc/base/plugin_manager.rb
nanoc-2.0.1 lib/nanoc/base/plugin_manager.rb
nanoc-2.0.3 lib/nanoc/base/plugin_manager.rb