This is a plugin loader for Ruby. Features:
- multiple plugin sources
- safe against plugins with broken code
- plugin code reloading
It is not tied to Rubygems or Rails. A plugin is any directory with a plugin.rb file inside that looks like this:
Plugin.define do name "Extras" version "1.0" # the file to load to load the plugin. It is expected to be an .rb # file relative to this definition file "extras" # this is an object that is defined by the plugin code object "App::Extras" # Dependencies of the plugin dependencies "core", ">=1.0", "fonts", ">=0.5, <1.9", "debug", ">0, !=0.95, < 2" end
See the spec/fixtures/example/ directory for an example of a set of plugins.
This directory of plugins can be loaded with:
manager = PluginManager.new manager.add_plugin_source("spec/fixtures/example") manager.load
The code in the appropriate plugins will be loaded and you will then have available:
# plugins that were loaded successfully manager.loaded_plugins # plugins that could not be loaded because of unmet dependencies, # or because a more recent version was available. manager.unloaded_plugins # plugin.rb files that could not be read manager.unreadable_definitions # plugins that raised exceptions while being loaded manager.plugins_with_errors
NB. There is a BIG difference between this and say, Rubygems, in that plugin_manager will ONLY EVER LOAD THE MOST RECENT VERSION OF A PLUGIN. Older versions essentially DON'T EXIST from the point of view of the plugin_manager.