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;