You are viewing a plain text version of this content. The canonical link for it is here.
Posted to axkit-dev@xml.apache.org by ma...@sergeant.org on 2006/08/07 02:20:39 UTC
[SVN] [52] Allow plugins as CPAN packages (e.g.
Revision: 52
Author: matt
Date: 2006-08-07 00:20:15 +0000 (Mon, 07 Aug 2006)
Log Message:
-----------
Allow plugins as CPAN packages (e.g. Plugin Foo::Bar)
Modified Paths:
--------------
trunk/lib/AxKit2/Client.pm
Modified: trunk/lib/AxKit2/Client.pm
===================================================================
--- trunk/lib/AxKit2/Client.pm 2006-08-06 23:26:07 UTC (rev 51)
+++ trunk/lib/AxKit2/Client.pm 2006-08-07 00:20:15 UTC (rev 52)
@@ -11,16 +11,34 @@
sub load_plugin {
my ($class, $conf, $plugin) = @_;
- my $dir = $conf->plugin_dir || "./plugins";
+ my $package;
- my $plugin_name = plugin_to_name($plugin);
- my $package = "AxKit2::Plugin::$plugin_name";
-
- # don't reload plugins if they are already loaded
- unless ( defined &{"${package}::plugin_name"} ) {
- AxKit2::Plugin->_compile($plugin_name,
- $package, "$dir/$plugin");
+ if ($plugin =~ m/::/) {
+ # "full" package plugin (My::Plugin)
+ $package = $plugin;
+ $package =~ s/[^_a-z0-9:]+//gi;
+ my $eval = qq[require $package;\n]
+ .qq[sub ${plugin}::plugin_name { '$plugin' }]
+ .qq[sub ${plugin}::hook_name { shift->{_hook}; }];
+ $eval =~ m/(.*)/s;
+ $eval = $1;
+ eval $eval;
+ die "Failed loading $package - eval $@" if $@;
+ $class->log(LOGDEBUG, "Loaded Plugin $package");
}
+ else {
+
+ my $dir = $conf->plugin_dir || "./plugins";
+
+ my $plugin_name = plugin_to_name($plugin);
+ $package = "AxKit2::Plugin::$plugin_name";
+
+ # don't reload plugins if they are already loaded
+ unless ( defined &{"${package}::plugin_name"} ) {
+ AxKit2::Plugin->_compile($plugin_name,
+ $package, "$dir/$plugin");
+ }
+ }
my $plug = $package->new();
$PLUGINS{$plugin} = $plug;