Project Home • Wiki • Known Issues • Screenshots • Contact Project
Plugger is a CFML framework that allows discreet 'plugin' modules of code to be automatically discovered and combined to form larger applications. See the wiki for a short tutorial, which is also included in the download in .md format (with slightly clearer formatting).
The modules interact via 'extension points' - named points in the publishing module's process at which other modules can contribute additional behaviour. It is similar idea to the Observer pattern in that multiple modules extend a single extension point, but no concept of events is involved, and it is left to the publisher to establish a protocol with which to communicate with its subscribers, typically by asking them to implement a common interface.
Plugger includes the following features:
- Autodiscovery of modules via a per-module 'plugin.cfm' file, which allows the module to declare:
- Its name and version
- Dependencies on other plugins
- Published extension points
- Extension points of other plugins to which it subscribes, and
- The classes to which the publisher should delegate extension point implementations to.
- Dependencies, versions and extension points are fully validated when the application starts, and configuration errors are clearly reported.
- Classes implementing extension points can implement an interface that allows context information to be injected into instances, allowing access to extension points and a scope shared between implementation instances in the same plugin
- Plugger provided powerful support for publishers to iterate over extensions with closures and high-order functions like 'each', 'map', 'fold', 'partition' and more, greatly streamlining the implementation of extension point behaviours.
- Application.cfc can extend a Plugger class to automatically discover and register plugins, using settings specified in the 'this' scope alongside normal application settings.
- Plugger provides a default application extension point, which allows modules to respond to application events like 'onApplicationStart'. These extension points try to let all extending modules contribute to the behaviour, for instance polling them all to determine the true/false return value of 'onRequestStart'.
- Plugins do not need to publish or subscribe to extension points - they may simply provide libraries of classes, templates and other resources required by other modules.
- Automatically generated documentation. If preferred the 'plugin.cfm' file can be written cfwheels-style with the declarations in-line in the text, and this text will be included in the documentation.
- A full suite of unit tests.
Railo 4, possibly ColdFusion 10 but not tested
There are no issues for this project.
To enter issues for this (or any other) project, you must be logged in.
Adobe and the Adobe product names are either registered trademarks or trademarks of Adobe Systems Incorporated in the United States and/or other countries.