The class responsible for keeping track of all loaded plugins, such as filters ({Nanoc3::Filter}), data sources ({Nanoc3::DataSource}) and VCSes ({Nanoc3::Extra::VCS}).
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
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
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
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
@deprecated Use {Nanoc3::PluginRegistry#find} instead
# File lib/nanoc3/base/plugin_registry.rb, line 155 def named(name) find(self, name) end
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
Generated with the Darkfish Rdoc Generator 2.