NAME
MooX::Object::Pluggable - Moo eXtension to inject plugins to exist objects as a role
VERSION
version 0.0.5
SYNOPSIS
In your package:
Define your plugin package:
Then in your script:
Or new
with pluggable options:
use
MyPackage;
MyPackage->new(
pluggable_options
=> {
search_path
=>
'MyPackage::Plugin'
},
# optional
load_plugins
=> [
"Foo"
,
qr/::Bar$/
]
);
Or use MooX with this:
DESCRIPTION
MooX::Object::Pluggable
for moo is designed to perform like MooseX::Object::Pluggable
for Moose staff. Mainly it use Moo::Role's apply_roles_to_object
to load plugins at runtime, but with the ability to choose plugins with package Module::Pluggable::Object.
METHODS
load_plugins
In most situation, your need only call the fuction load_plugins
on an object. The parameters support String, Regexp, or Array or ArrayRef of them.
eg.
$o
->load_plugins(
"Foo"
,
"Bar"
,
qr/^Class::Plugin::(Abc|N)[0-9]/
, [
qw/Other Way/
]);
And there's another syntax sugar, when you just want to load a specific role:
$o
->load_plugins(
"+MooX::ConfigFromFile::Role"
);
# Notice that the '+' sign does not support Regexp, use whole package name with it.
plugins
The method plugins
returns a array of plugins, defaultly in the namespace Your::Package::Plugin::
. You can manage it by implement the _build_pluggable_options
in your package and given the avaliable options' HashRef.
All the avaliable options will be found in tutorial of package Module::Pluggable.
loaded_plugins
This will list all loaded plugins of current object for you.
DESIGN
Considering not import any new attributes to the consumers, I'm using a private variable for help to maintain Module::Pluggable::Object objects so that it only create once for each package, and could provide private configuration for specific objects that use diffent pluggable options in new
.
There's two way to configure user defined pluggable options.
new(pluggable_options => {}, load_plugins => [])
User could directly use there specific options for plugin. And create objects with some plugins after BUILD
step.
_build_pluggable_options
Implement this build function in your package, and MooX::Object::Pluggable
will apply the options for you.
And you still could change default options in new
method.
MooX
A MooX-compatible interface like this:
...
package
MyPackage;
use
MooX::Object::Pluggable
-pluggable_options
=> {
search_path
=> [
"MyPackage"
] },
-load_plugins
=> [
'Hello'
];
Or:
use
MooX
'Object::Pluggable'
=> {
-pluggable_options
=> {
search_path
=> [
"MyPackage"
] },
-load_plugins
=> [
'Hello'
] };
SEE ALSO
Module::Pluggable, MooseX::Object::Pluggable
AUTHOR
Huo Linhe <linhehuo@gmail.com>
COPYRIGHT AND LICENSE
This software is copyright (c) 2016 by Huo Linhe.
This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.