1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79
|
package Test::MockFile::Plugins;
use strict;
use warnings;
our $VERSION = '0.037';
our @NAMESPACES = (q[Test::MockFile::Plugin]);
sub load_plugin {
my ($name_or_array) = @_;
my $list = ref $name_or_array ? $name_or_array : [$name_or_array];
my @plugins;
foreach my $name (@$list) {
push @plugins, _load_plugin($name);
}
return @plugins;
}
sub _load_plugin {
my ($name) = @_;
my @candidates = map { "${_}::$name" } @NAMESPACES;
foreach my $c (@candidates) {
next unless _load($c);
my $plugin = $c->new();
return $plugin->register;
}
die qq[Cannot find a Test::MockFile plugin for $name];
}
sub _load {
my ($pkg) = @_;
return unless eval qq{ require $pkg; 1 };
return $pkg->isa('Test::MockFile::Plugin');
}
1;
=encoding utf8
=head1 NAME
Test::MockFile::Plugins - Plugin loader
=head1 SYNOPSIS
use Test::MockFile::Plugins;
unshift @Test::MockFile::Plugins::NAMESPACES, q[Your::NameSpace];
Test::MockFile::Plugins::load_plugins( 'YourPlugin' );
=head1 DESCRIPTION
L<Test::MockFile::Plugins> is responsible for loading plugins.
BETA WARNING: This is a preliminary plugins implementation. It might
change in the future.
=head1 METHODS
=head2 load_plugin( $plugin_name )
Test::MockFile::Plugins::load_plugin( 'YourPlugin' );
=head1 SEE ALSO
L<Test::MockFile>, L<Test::MockFile::Plugin>
=cut
|