Giter Site home page Giter Site logo

plugin_manager's Introduction

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

plugin_manager's People

Contributors

danlucraft avatar timfel avatar

Stargazers

 avatar  avatar

Watchers

 avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.