Class: Nanoc3::PluginRegistry

### Home Classes Methods

### In Files

- lib/nanoc3/base/plugin_registry.rb

### Parent

Object

### Namespace

- MODULE Nanoc3::PluginRegistry::PluginMethods

### Methods

- ::instance
- ::new
- #all
- #find
- #named
- #register

### Files

- ChangeLog
- LICENSE

### Class/Module Index

Quicksearch

- Nanoc3
- Nanoc3::ArrayExtensions
- Nanoc3::CLI
- Nanoc3::CLI::Base
- Nanoc3::CLI::Commands
- Nanoc3::CLI::Commands::Autocompile
- Nanoc3::CLI::Commands::Compile
- Nanoc3::CLI::Commands::CreateItem
- Nanoc3::CLI::Commands::CreateLayout
- Nanoc3::CLI::Commands::CreateSite
- Nanoc3::CLI::Commands::Debug
- Nanoc3::CLI::Commands::Help
- Nanoc3::CLI::Commands::Info
- Nanoc3::CLI::Commands::Update
- Nanoc3::CLI::Commands::View
- Nanoc3::CLI::Logger
- Nanoc3::CodeSnippet
- Nanoc3::Compiler
- Nanoc3::CompilerDSL
- Nanoc3::Context
- Nanoc3::DataSource
- Nanoc3::DataSources
- Nanoc3::DataSources::Delicious
- Nanoc3::DataSources::Filesystem
- Nanoc3::DataSources::FilesystemCombined
- Nanoc3::DataSources::FilesystemCompact
- Nanoc3::DataSources::FilesystemUnified
- Nanoc3::DataSources::FilesystemVerbose
- Nanoc3::DataSources::LastFM
- Nanoc3::DataSources::Twitter
- Nanoc3::DependencyTracker
- Nanoc3::DirectedGraph
- Nanoc3::Errors
- Nanoc3::Errors::CannotDetermineFilter
- Nanoc3::Errors::CannotLayoutBinaryItem
- Nanoc3::Errors::CannotUseBinaryFilter
- Nanoc3::Errors::CannotUseTextualFilter
- Nanoc3::Errors::DataNotYetAvailable
- Nanoc3::Errors::Generic
- Nanoc3::Errors::NoMatchingCompilationRuleFound
- Nanoc3::Errors::NoMatchingRoutingRuleFound
- Nanoc3::Errors::NoRulesFileFound
- Nanoc3::Errors::RecursiveCompilation
- Nanoc3::Errors::UnknownDataSource
- Nanoc3::Errors::UnknownFilter
- Nanoc3::Errors::UnknownLayout
- Nanoc3::Errors::UnmetDependency
- Nanoc3::Extra
- Nanoc3::Extra::AutoCompiler
- Nanoc3::Extra::CHiCk
- Nanoc3::Extra::CHiCk::CacheController
- Nanoc3::Extra::CHiCk::Client
- Nanoc3::Extra::CHiCk::RackClient
- Nanoc3::Extra::Context
- Nanoc3::Extra::Deployers
- Nanoc3::Extra::Deployers::Rsync
- Nanoc3::Extra::FileProxy
- Nanoc3::Extra::TimeExtensions
- Nanoc3::Extra::VCS
- Nanoc3::Extra::VCSes
- Nanoc3::Extra::VCSes::Bazaar
- Nanoc3::Extra::VCSes::Dummy
- Nanoc3::Extra::VCSes::Git
- Nanoc3::Extra::VCSes::Mercurial
- Nanoc3::Extra::VCSes::Subversion
- Nanoc3::Extra::Validators
- Nanoc3::Extra::Validators::Links
- Nanoc3::Extra::Validators::Links::EachPairEnumerator
- Nanoc3::Extra::Validators::W3C
- Nanoc3::Filter
- Nanoc3::Filters
- Nanoc3::Filters::BlueCloth
- Nanoc3::Filters::CodeRay
- Nanoc3::Filters::ColorizeSyntax
- Nanoc3::Filters::ERB
- Nanoc3::Filters::Erubis
- Nanoc3::Filters::Haml
- Nanoc3::Filters::Kramdown
- Nanoc3::Filters::Less
- Nanoc3::Filters::Markaby
- Nanoc3::Filters::Maruku
- Nanoc3::Filters::RDiscount
- Nanoc3::Filters::RDoc
- Nanoc3::Filters::Rainpress
- Nanoc3::Filters::RedCloth
- Nanoc3::Filters::RelativizePaths
- Nanoc3::Filters::RubyPants
- Nanoc3::Filters::Sass
- Nanoc3::HashExtensions
- Nanoc3::Helpers
- Nanoc3::Helpers::Blogging
- Nanoc3::Helpers::Breadcrumbs
- Nanoc3::Helpers::Capturing
- Nanoc3::Helpers::Filtering
- Nanoc3::Helpers::HTMLEscape
- Nanoc3::Helpers::LinkTo
- Nanoc3::Helpers::Rendering
- Nanoc3::Helpers::Tagging
- Nanoc3::Helpers::Text
- Nanoc3::Helpers::XMLSitemap
- Nanoc3::Item
- Nanoc3::ItemRep
- Nanoc3::Layout
- Nanoc3::NotificationCenter
- Nanoc3::PluginRegistry
- Nanoc3::PluginRegistry::PluginMethods
- Nanoc3::Rule
- Nanoc3::RuleContext
- Nanoc3::Site
- Nanoc3::StringExtensions
- Nanoc3::Tasks
- Nanoc3::Tasks::Clean
- Array
- Enumerable
- Hash
- Object
- OrderedHash
- String
- Time

No matching classes.

# Nanoc3::PluginRegistry

The class responsible for keeping track of all loaded plugins, such as filters ({Nanoc3::Filter}), data sources ({Nanoc3::DataSource}) and VCSes ({Nanoc3::Extra::VCS}).

### Public Class Methods

instance() click to toggle source

Returns the shared {PluginRegistry} instance, creating it if none exists yet.

@return [Nanoc3::PluginRegistry] The shared plugin registry

    # File lib/nanoc3/base/plugin_registry.rb, line 67
    def self.instance
      @instance ||= self.new
    end

new() click to toggle source

Creates a new plugin registry. This should usually not be necessary; it is recommended to use the shared instance (obtained from {Nanoc3::PluginRegistry.instance}).

    # File lib/nanoc3/base/plugin_registry.rb, line 74
    def initialize
      @map = {}
    end

### Public Instance Methods

all() click to toggle source

Returns a list of all plugins. The returned list of plugins is an array with array elements in the following format:

    { :class => ..., :superclass => ..., :identifiers => ... }

@return [Array<Hash>] A list of all plugins in the format described

    # File lib/nanoc3/base/plugin_registry.rb, line 127
    def all
      plugins = []
      @map.each_pair do |superclass, submap|
        submap.each_pair do |identifier, klass|
          # Find existing plugin
          existing_plugin = plugins.find do |p|
            p[:class] == klass && p[:superclass] == superclass
          end

          if existing_plugin
            # Add identifier to existing plugin
            existing_plugin[:identifiers] << identifier
            existing_plugin[:identifiers] = existing_plugin[:identifiers].sort_by { |s| s.to_s }
          else
            # Create new plugin
            plugins << {
              :class       => klass,
              :superclass  => superclass,
              :identifiers => [ identifier ]
            }
          end
        end
      end

      plugins
    end

find(klass, name) click to toggle source

Finds the plugin that is a subclass of the given class and has the given name.

@param [Symbol] name The name of the plugin to return

@return [Class, nil] The plugin with the given name

    # File lib/nanoc3/base/plugin_registry.rb, line 106
    def find(klass, name)
      # Initialize
      @map[klass] ||= {}

      # Lookup
      class_or_name = @map[klass][name.to_sym]

      # Get class
      if class_or_name.is_a?(String)
        class_or_name.scan(/\w+/).inject(klass) { |memo, part| memo.const_get(part) }
      else
        class_or_name
      end
    end

named(name) click to toggle source

@deprecated Use {Nanoc3::PluginRegistry#find} instead

    # File lib/nanoc3/base/plugin_registry.rb, line 155
    def named(name)
      find(self, name)
    end

register(superclass, class_or_name, *identifiers) click to toggle source

Registers the given class as a plugin.

@param [Class] superclass The superclass of the plugin. For example: {Nanoc3::Filter}, {Nanoc3::Extra::VCS}.

@param [Class, String] class_or_name The class to register. This can be a string, in which case it will be automatically converted to a proper class at lookup. For example: `Nanoc3::Filters::ERB`, `“Nanoc3::Filters::Haml”`.

@param [Symbol] identifiers One or more symbols identifying the class. For example: `:haml`, :`erb`.

@return [void]

    # File lib/nanoc3/base/plugin_registry.rb, line 92
    def register(superclass, class_or_name, *identifiers)
      @map[superclass] ||= {}

      identifiers.each do |identifier|
        @map[superclass][identifier.to_sym] = class_or_name
      end
    end

[Validate]

Generated with the Darkfish Rdoc Generator 2.