Maurice Mengel > Plugin-Tiny-0.002 > Plugin::Tiny

Download:
Plugin-Tiny-0.002.tar.gz

Dependencies

Annotate this POD

Website

CPAN RT

New  1
Open  0
View/Report Bugs
Module Version: 0.002   Source   Latest Release: Plugin-Tiny-0.012

NAME ^

Plugin::Tiny - A tiny plugin system for perl

VERSION ^

version 0.002

SYNOPSIS ^

  #from core or bundling plugin
  use Moose; #optional, t/tiny.t avoids using moose in core
  use Plugin::Tiny; 
  has 'plugins'=>(
    is=>'ro',
    isa=>'Plugin::Tiny', 
    default=>sub{Plugin::Tiny->new()}
  );
  
  #load plugin_class (and perhaps phase) from your configuration
  $self->plugins->register(
    phase=>$phase,         #optional; defaults to last part of plugin class
    plugin=>$plugin_class, #required
    role=>$role,           #optional
    arg1=>$arg1,           #optional
    arg2=>$arg2,           #optional
  );

  #execute your plugin's methods 
  my $plugin=$self->get_plugin ($phase); 
  $plugin->do_something(@args);  

DESCRIPTION ^

Plugin::Tiny is minimalistic plugin system for perl. Each plugin is associated with a keyword (referred to as phase). A limitation of Plugin::Tiny is that each phase can have only one plugin.

Bundles of Plugins

You can still create bundles of plugins if you hand the plugin system down to the (bundeling) plugin. That way, you can load multiple plugins for one phase (althoughyou still need distinct phase labels for each plugin).

  #in your core
  $self->plugins->register(
    phase=>'Scan', 
    plugin=>'Plugin::ScanBundle', 
    plugins=>$self->plugins, #plugin system
  );

  #in Plugin::ScanBundle
  has 'plugins'=>(is=>'ro', isa=>'Plugin::Tiny', required=>1); 
  $self->plugins->register (plugin=>'Plugin::Scan1'); 
  $self->plugins->register (plugin=>'Plugin::Scan2'); 
  
  my $scan1=$self->plugins->get('Scan1');
  $scan1->do_something(@args);  

Require a Plugin Role

You may want to do a plugin role for all you plugins, e.g. to standardize an interface etc.

ATTRIBUTES ^

prefix

Optional init argument. You can have the prefix added to all plugin classes you register so save some typing and force plugins in your namespace:

  #without prefix  
  my $ps=Plugin::Tiny->new  
  $ps->register(plugin='Your::App::Plugin::Example1');
  $ps->register(plugin='Your::App::Plugin::Example2');

  #with prefix  
  my $ps=Plugin::Tiny->new (  prefix=>'Your::App::Plugin::' );  
  $ps->register(plugin='Example1');
  $ps->register(plugin='Example2');

role

Optional init argument. A default role to be applied to all plugins. Can be overwritten in register.

METHODS ^

$plugin_system->register(phase=>$phase, plugin=>$plugin_class);

Optionally, you can also specify a role which your plugin will have to be able to apply. Remaining key value pairs are passed down to the plugin constructor:

  $plugin_system->register (
    phase=>$phase,           #optional. Defaults to last part of plugin_class 
    plugin=>$plugin_class,   #required
    role=>$role,             #optional
    plugins=>$plugin_system, #optional
    args=>$more_args,        #optional
  );

A side-effect is that your plugin cannot use 'phase', 'plugin', 'role' as named arguments.

Returns the newly created plugin object on success. Confesses on error.

my $plugin=$self->get_plugin ($phase);

Returns the plugin object associated with the phase.

AUTHOR ^

Maurice Mengel <mauricemengel@gmail.com>

COPYRIGHT AND LICENSE ^

This software is copyright (c) 2012 by Maurice Mengel.

This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.

syntax highlighting: