]> git.decadent.org.uk Git - maypole.git/blobdiff - lib/Maypole.pm
fixes to plain CDBI model
[maypole.git] / lib / Maypole.pm
index 85d471f33f43369b3d94370cc672aad065d47d10..5d3e25963c7f2d29fb8c2f3286ba5031b44c9a25 100644 (file)
@@ -194,7 +194,7 @@ synopsis of L<Maypole::Plugin::FormBuilder> for an example driver
 
 =cut
 
-__PACKAGE__->mk_classdata($_) for qw( config init_done view_object );
+__PACKAGE__->mk_classdata($_) for qw( config init_done view_object model_classes_loaded);
 
 __PACKAGE__->mk_accessors(
     qw( params query objects model_class template_args output path
@@ -206,6 +206,8 @@ __PACKAGE__->config( Maypole::Config->new() );
 
 __PACKAGE__->init_done(0);
 
+__PACKAGE__->model_classes_loaded(0);
+
 =head1 HOOKABLE METHODS
 
 As a framework, Maypole provides a number of B<hooks> - methods that are
@@ -306,15 +308,16 @@ sub setup_model
     
     foreach my $subclass ( @{ $config->classes } ) 
     {
-        no strict 'refs';
-        unshift @{ $subclass . "::ISA" }, $config->model;
-        
-        # Load custom model code, if it exists - nb this must happen after the 
-        # unshift, to allow code attributes to work, but before adopt(),  
-        # in case adopt() calls overridden methods on $subclass
-        $class->load_model_subclass($subclass);
-        
-        $config->model->adopt($subclass) if $config->model->can("adopt");
+      next if $subclass->isa("Maypole::Model::Base");
+      no strict 'refs';
+      unshift @{ $subclass . "::ISA" }, $config->model;
+      
+      # Load custom model code, if it exists - nb this must happen after the 
+      # unshift, to allow code attributes to work, but before adopt(),  
+      # in case adopt() calls overridden methods on $subclass
+      $class->load_model_subclass($subclass) unless ($class->model_classes_loaded());
+      
+      $config->model->adopt($subclass) if $config->model->can("adopt");
     }
 }
 
@@ -443,16 +446,11 @@ sub handler : method
     $self->get_user;
     
     my $status = $self->handler_guts;
-    
-    # moving this here causes unit test failures - need to check why
-    # before committing the move
-    #$status = $self->__call_process_view unless $self->output;
-    
     return $status unless $status == OK;
     
     # TODO: require send_output to return a status code
     $self->send_output;
-    
+
     return $status;
 }