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;