Pluggable

Find plugin classes or modules

NAME

Pluggable - dynamically find modules or classes under a given namespace

This is a modified version orginally based on https://github.com/tony-o/perl6-pluggable.

SYNOPSIS

Given a set of plugins in your library search path:

a::Plugins::Plugin1
a::Plugins::Plugin2
a::Plugins::PluginClass1::PluginClass2::Plugin3

And an invocation of Pluggable like this:

use Pluggable; 

class a does Pluggable {
    method listplugins () {
        @($.plugins).map({.perl}).join("\n").say;
    }
}

a.new.listplugins;

The following output would be produced:

a::Plugins::Plugin1
a::Plugins::Plugin2
a::Plugins::PluginClass1::PluginClass2::Plugin3

FEATURES

  • Role as well as procedural interface

  • Custom module name matching

  • Finding plugins outside of the current modules namespace

DESCRIPTION

Object-Oriented Interface

When "doing" the Pluggable role, a class can use the "plugins" method:

$.plugins(:$base = Nil, :$plugins-namespace = 'Plugins', :$name-matcher = Nil)

:$base (optional)

The base namespace to look for plugins under, if not provided then the namespace from which pluggable is invoked is used.

:$plugins-namespace (default: 'Plugins')

The name of the namespace within $base that contains plugins.

:$name-matcher (optional)

If present, the name of any module found will be compared with this and only returned if they match.

Procedural Interface

In a similar fashion, the module can be used in a non-OO environment, it exports a single sub:

plugins($base, :$plugins-namespace = 'Plugins', :$name-matcher = Nil)

$base (required)

The base namespace to look for plugins under. Unlike in the OO case, this is required in the procedural interface.

:$plugins-namespace (default: 'Plugins')

The name of the namespace within $base that contains plugins.

:$name-matcher (optional)

If present, the name of any module found will be compared with this and only returned if they match.

DEBUGGING

If you're having trouble with an object you think should be loading but would like to find out what is bonking in require, set $*DEBUG-PLUGINS to a truthy value.

LICENSE

Released under the Artistic License 2.0 http://www.perlfoundation.org/artistic_license_2_0

AUTHORS

Pluggable v0.6

Find plugin classes or modules

Authors

  • Robert Lemmen
  • Tony ODell

License

Artistic-2.0

Dependencies

Test::META

Test Dependencies

Provides

  • Pluggable

The Camelia image is copyright 2009 by Larry Wall. "Raku" is trademark of the Yet Another Society. All rights reserved.