]> git.decadent.org.uk Git - maypole.git/blobdiff - lib/Maypole/Model/Base.pm
only set $r->objects if there is an object
[maypole.git] / lib / Maypole / Model / Base.pm
index 580e6e1c942cb7cbfd3be63dae9f1cd4c6a74590..3375dfd26fba523b126e784c93e32a9779b8cfb6 100644 (file)
@@ -15,7 +15,8 @@ sub process {
     return if $r->{template};    # Authentication has set this, we're done.
 
     $r->{template} = $method;
     return if $r->{template};    # Authentication has set this, we're done.
 
     $r->{template} = $method;
-    $r->objects([ $class->fetch_objects($r) ]);
+    my $obj = $class->fetch_objects($r);
+    $r->objects([$obj]) if $obj;
     $class->$method( $r, $obj, @{ $r->{args} } );
 }
 
     $class->$method( $r, $obj, @{ $r->{args} } );
 }
 
@@ -34,12 +35,12 @@ Maypole::Model::Base - Base class for model classes
 =head1 DESCRIPTION
 
 This is the base class for Maypole data models. This is an abstract class
 =head1 DESCRIPTION
 
 This is the base class for Maypole data models. This is an abstract class
-meant to define the interface, and can't be used directly.
+that defines the interface, and can't be used directly.
 
 =head2 process
 
 
 =head2 process
 
-This is the engine of this module. It populates all the relevant variables
-and calls the requested action.
+This is the engine of this module. Given the request object, it populates
+all the relevant variables and calls the requested action.
 
 Anyone subclassing this for a different database abstraction mechanism
 needs to provide the following methods:
 
 Anyone subclassing this for a different database abstraction mechanism
 needs to provide the following methods:
@@ -51,8 +52,8 @@ needs to provide the following methods:
 Uses the user-defined data in C<@data> to specify a database- for
 example, by passing in a DSN. The model class should open the database,
 and create a class for each table in the database. These classes will
 Uses the user-defined data in C<@data> to specify a database- for
 example, by passing in a DSN. The model class should open the database,
 and create a class for each table in the database. These classes will
-then be C<adopt>ed. It should also populate C<< $config->{tables} >> and
-C<< $config->{classes} >> with the names of the classes and tables
+then be C<adopt>ed. It should also populate C<< $config->tables >> and
+C<< $config->classes >> with the names of the classes and tables
 respectively. The classes should be placed under the specified
 namespace. For instance, C<beer> should be mapped to the class
 C<BeerDB::Beer>.
 respectively. The classes should be placed under the specified
 namespace. For instance, C<beer> should be mapped to the class
 C<BeerDB::Beer>.
@@ -65,12 +66,14 @@ This maps between a table name and its associated class.
 
 =head2 fetch_objects
 
 
 =head2 fetch_objects
 
-This method should populate $r->objects from $r->{args}.
+This class method is passed a request object and is expected to return an
+object of the appropriate table class from information stored in the request
+object.
 
 =head2 adopt
 
 
 =head2 adopt
 
-This is called on an model class representing a table and allows the
-master model class to do any set-up required. 
+This class method is passed the name of a model class that represensts a table
+and allows the master model class to do any set-up required.
 
 =head2 columns
 
 
 =head2 columns
 
@@ -87,7 +90,7 @@ sub class_of       { die "This is an abstract method" }
 sub setup_database { die "This is an abstract method" }
 sub fetch_objects { die "This is an abstract method" }
 
 sub setup_database { die "This is an abstract method" }
 sub fetch_objects { die "This is an abstract method" }
 
-=head2 Commands
+=head2 Actions
 
 =over
 
 
 =over
 
@@ -105,13 +108,13 @@ sub do_edit { die "This is an abstract method" }
 
 =item list
 
 
 =item list
 
-The C<list> method should fill C<< $r-> objects >> with all of the
+The C<list> method should fill C<$r-E<gt>objects> with all of the
 objects in the class. You may want to page this using C<Data::Page> or
 similar.
 
 =item edit
 
 objects in the class. You may want to page this using C<Data::Page> or
 similar.
 
 =item edit
 
-Empty Action
+Empty Action.
 
 =item view
 
 
 =item view
 
@@ -143,7 +146,7 @@ following methods:
 
 =head2 display_columns
 
 
 =head2 display_columns
 
-Returns a list of columns to display in the model. by default returns
+Returns a list of columns to display in the model. By default returns
 all columns in alphabetical order. Override this in base classes to
 change ordering, or elect not to show columns.
 
 all columns in alphabetical order. Override this in base classes to
 change ordering, or elect not to show columns.
 
@@ -177,7 +180,7 @@ sub description { "A poorly defined class" }
 =head2 is_public
 
 should return true if a certain action is supported, or false otherwise. 
 =head2 is_public
 
 should return true if a certain action is supported, or false otherwise. 
-Defaults to checking if the sub has the :Exported attribute.
+Defaults to checking if the sub has the C<:Exported> attribute.
 
 =cut
 
 
 =cut
 
@@ -205,3 +208,5 @@ sub related {
 }
 
 1;
 }
 
 1;
+
+