This is a plugin loader for Ruby. Features:
- dependencies
- versioning
- 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.
MIT