Pluggable

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.

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.