A Ruby plugin loader
Switch branches/tags
Nothing to show
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
lib
spec
.gitignore
README.md
Rakefile
plugin_manager.gemspec

README.md

Plugin Manager

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.

License

MIT