[Jifty-commit] r1474 - in jifty/branches/plugin_rewrite: . lib lib/Jifty lib/Jifty/Plugin plugins/Login/doc plugins/Login/share/po plugins/Login/share/web/static

jifty-commit at lists.jifty.org jifty-commit at lists.jifty.org
Tue Jul 4 12:21:30 EDT 2006


Author: jpeacock
Date: Tue Jul  4 12:21:24 2006
New Revision: 1474

Added:
   jifty/branches/plugin_rewrite/plugins/Login/doc/
   jifty/branches/plugin_rewrite/plugins/Login/share/po/
   jifty/branches/plugin_rewrite/plugins/Login/share/web/static/
   jifty/branches/plugin_rewrite/plugins/Login/t/
Modified:
   jifty/branches/plugin_rewrite/   (props changed)
   jifty/branches/plugin_rewrite/lib/Jifty.pm
   jifty/branches/plugin_rewrite/lib/Jifty/Plugin/ClassLoader.pm
   jifty/branches/plugin_rewrite/lib/Jifty/Util.pm

Log:
Fully working (no errors!) plugins now.

Modified: jifty/branches/plugin_rewrite/lib/Jifty.pm
==============================================================================
--- jifty/branches/plugin_rewrite/lib/Jifty.pm	(original)
+++ jifty/branches/plugin_rewrite/lib/Jifty.pm	Tue Jul  4 12:21:24 2006
@@ -126,6 +126,7 @@
         my $class = "Jifty::Plugin::".(keys %{$plugin})[0];
         my %options = %{ $plugin->{(keys %{$plugin})[0]} };
         Jifty::Util->require($class);
+        Jifty::ClassLoader->new(base => $class)->require;
         push @plugins, $class->new(%options);
     }
 

Modified: jifty/branches/plugin_rewrite/lib/Jifty/Plugin/ClassLoader.pm
==============================================================================
--- jifty/branches/plugin_rewrite/lib/Jifty/Plugin/ClassLoader.pm	(original)
+++ jifty/branches/plugin_rewrite/lib/Jifty/Plugin/ClassLoader.pm	Tue Jul  4 12:21:24 2006
@@ -109,58 +109,38 @@
     $module =~ s{/}{::}g;
 
     # The quick check
-    return undef unless $module =~ m!^($base|$plugin)!;
+    return undef unless $module =~ m!^$base!;
 
+    # Note that at this point, all of the plugins classes will already be
+    # loaded, so we can just check their presence when deciding whether
+    # this is a class the plugin intends to autocreate
     if ( $module =~ m{^(?:$base)::(Notification|CurrentUser)$} ) {
-        my $toplevel = "${plugin}::$1";
+        my $method = "${plugin}::$1";
         return $self->return_class(
                   "use warnings; use strict; package $module;\n"
-                . "use base qw/$toplevel/;\n"
+                . "use base qw/$method/;\n"
                 . "sub _autogenerated { 1 };\n"
                 . "1;" ) 
-            if ($toplevel->require);
+            if Jifty::Util->already_required($method);
     } 
     elsif ( $module =~ m{^(?:$base)::Action::([^\.]+)$} ) {
-        my $action = "${plugin}::Action::$1";
-        return $self->return_class(
-                  "use warnings; use strict; package $module;\n"
-                . "use base qw/$action/;\n"
-                . "sub autogenerated { 1 };\n"
-                . "1;" )
-            if ($action->require);
-    } 
-    # now generate inherited classes for the plugin itself
-    elsif ( $module =~ m{^(?:$plugin)::Action::(Create|Update|Delete)([^\.]+)$} ) {
-        my $modelclass = $plugin . "::Model::" . $2;
-	return undef if
-	    ( keys %{$self->{models}} ) &&
-	    ( not defined $self->{models}{$modelclass});
-
-        Jifty::Util->require($modelclass);
+        my $method = $1;
 
-        return undef unless eval { $modelclass->table };
+        # Check to see if this is an action for a model that this plugin 
+        # doesn't support
+        if ( $method =~ m/^(?:Create|Update|Delete)([^\.]+)$/ ) {
+            my $model = "${plugin}::Model::$1";
+            return undef unless Jifty::Util->already_required($model);
+        }
 
+        $method = "${plugin}::Action::$method";
         return $self->return_class(
                   "use warnings; use strict; package $module;\n"
-                . "use base qw/Jifty::Action::Record::$1/;\n"
-                . "sub record_class { '$modelclass' };\n"
+                . "use base qw/$method/;\n"
                 . "sub autogenerated { 1 };\n"
-                . "1;" );
-    }
-    elsif ( $module =~ m{^(?:$plugin)::(Record|Collection|Notification|Dispatcher|Bootstrap|Upgrade)$} ) {
-        return $self->return_class(
-                  "use warnings; use strict; package $module;\n"
-                . "use base qw/Jifty::$1/;\n"
-                . "sub _autogenerated { 1 };\n"
-                . "1;" );
+                . "1;" )
+            if Jifty::Util->already_required($method);
     } 
-    elsif ( $module =~ m{^(?:$plugin)::Model::(\w+)Collection$} ) {
-        return $self->return_class(
-                  "use warnings; use strict; package $module;\n"
-                . "use base qw/@{[$plugin]}::Collection/;\n"
-                . "sub record_class { '@{[$plugin]}::Model::$1' }\n"
-                . "1;" );
-    }
 
     return undef;
 }

Modified: jifty/branches/plugin_rewrite/lib/Jifty/Util.pm
==============================================================================
--- jifty/branches/plugin_rewrite/lib/Jifty/Util.pm	(original)
+++ jifty/branches/plugin_rewrite/lib/Jifty/Util.pm	Tue Jul  4 12:21:24 2006
@@ -190,8 +190,7 @@
         return 0;
     }
 
-    my $path =  join('/', split(/::/,$class)).".pm";
-    return 1 if $INC{$path};
+    return 1 if $self->already_required($class);
 
     my $retval = $class->require;
     if ($UNIVERSAL::require::ERROR) {
@@ -210,6 +209,12 @@
     return 1;
 }
 
+sub already_required {
+    my ($self, $class) = @_;
+    my $path =  join('/', split(/::/,$class)).".pm";
+    return ( $INC{$path} ? 1 : 0);
+}
+
 =head1 AUTHOR
 
 Various folks at Best Practical Solutions, LLC.


More information about the Jifty-commit mailing list