]> git.decadent.org.uk Git - maypole.git/blobdiff - lib/Maypole.pm
tested and it seems to work
[maypole.git] / lib / Maypole.pm
index 83ce94ab31d51974bbdcf9c608c54b9a8d18b32c..d476b56a46e55ed9dad22695f8a10e33b9e0db5d 100644 (file)
@@ -12,7 +12,7 @@ use URI::QueryParam;
 use NEXT;
 use File::MMagic::XS qw(:compat);
 
-our $VERSION = '2.11_pre2';
+our $VERSION = '2.11';
 our $mmagic = File::MMagic::XS->new();
 
 # proposed privacy conventions:
@@ -35,6 +35,9 @@ The canonical example used in the Maypole documentation is the beer database:
     
     # choose a frontend, initialise the config object, and load a plugin
     use Maypole::Application qw/Relationship/;
+
+    # set everything up
+    __PACKAGE__->setup("dbi:SQLite:t/beerdb.db");
     
     # get the empty config object created by Maypole::Application
     my $config = __PACKAGE__->config;
@@ -62,8 +65,8 @@ The canonical example used in the Maypole documentation is the beer database:
         date => [ qw/date/],
     );
 
-    # set everything up
-    __PACKAGE__->setup("dbi:SQLite:t/beerdb.db");
+    # note : set up model before calling this method
+    BeerDB::Beer->required_columns([qw/name/]); 
 
     1;    
 
@@ -91,7 +94,7 @@ configuration (B<before> calling setup.)
 
 Note that some details in some of these resources may be out of date.
 
-=over 4 
+=over 4
 
 =item The Maypole Manual
 
@@ -120,7 +123,7 @@ may be out of date.
 =item Web applications with Maypole
 
 A tutorial written by Simon Cozens for YAPC::EU 2005 -
-http://www.droogs.org/perl/maypole/maypole-tutorial.pdf [228KB].
+http://www.aarontrevena.co.uk/opensource/maypole/maypole-tutorial.pdf [228KB].
 
 =item A Database-Driven Web Application in 18 Lines of Code
 
@@ -148,7 +151,7 @@ http://www.perl.com/pub/a/2004/04/15/maypole.html
 =item Authentication
 
 Some notes written by Simon Cozens. A little bit out of date, but still 
-very useful: http://www.droogs.org/perl/maypole/authentication.html
+very useful: http://www.aarontrevena.co.uk/opensource/maypole/authentication.html
 
 =item CheatSheet
 
@@ -173,30 +176,6 @@ http://cpanratings.perl.org/dist/Maypole
 
 =back
 
-=head1 DEMOS
-
-A couple of demos are available, sometimes with source code and configs. 
-
-=over 4 
-
-=item http://maypole.perl.org/beerdb/
-
-The standard BeerDB example, using the TT factory templates supplied in the
-distribution.
-
-=item beerdb.riverside-cms.co.uk
-
-The standard BeerDB example, running on Mason, using the factory templates
-supplied in the L<MasonX::Maypole> distribution.
-
-=item beerfb.riverside-cms.co.uk
-
-A demo of L<Maypole::FormBuilder>. This site is running on the set of Mason 
-templates included in the L<Maypole::FormBuilder> distribution. See the 
-synopsis of L<Maypole::Plugin::FormBuilder> for an example driver
-
-=back
-
 =cut
 
 __PACKAGE__->mk_classdata($_) for qw( config init_done view_object model_classes_loaded);
@@ -255,7 +234,7 @@ Some packages respond to higher debug levels, try increasing it to 2 or 3.
 
 =cut
 
-sub debug { 1 }
+sub debug { 0 }
 
 =item config
 
@@ -652,9 +631,17 @@ sub __get_mime_type {
 sub __load_request_model
 {
     my ($self) = @_;
-    $self->model_class( $self->config->model->class_of($self, $self->table) );
+       # We may get a made up class from class_of
+    my $mclass = $self->config->model->class_of($self, $self->table);
+    if ( eval {$mclass->isa('Maypole::Model::Base')} ) {
+        $self->model_class( $mclass );
+    }
+    elsif ($self->debug) {
+      warn "***Warning:  No $mclass class appropriate for model. @_"; 
+    }
 }
 
+
 # is_applicable() returned false, so set up a plain template. Model processing 
 # will be skipped, but need to remove the model anyway so the template can't 
 # access it. 
@@ -955,8 +942,6 @@ sub send_output {
 }
 
 
-
-
 =back
 
 =head2 Path processing and manipulation
@@ -977,13 +962,12 @@ properties. Calls C<preprocess_path> before parsing path and setting properties.
 sub parse_path 
 {
     my ($self) = @_;
-    
+
     # Previous versions unconditionally set table, action and args to whatever 
     # was in @pi (or else to defaults, if @pi is empty).
     # Adding preprocess_path(), and then setting table, action and args 
     # conditionally, broke lots of tests, hence this:
     $self->$_(undef) for qw/action table args/;
-    
     $self->preprocess_path;
     $self->path || $self->path('frontpage');
 
@@ -1146,15 +1130,38 @@ If the first item in C<$self-E<gt>args> can be C<retrieve()>d by the model
 class, it will be removed from C<args> and the retrieved object will be added to
 the C<objects> list. See L<Maypole::Model> for more information.
 
+
+=item object
+
+Alias to get/set the first/only model object. The object will be accessible
+in the view templates.
+
+When used to set the object, will overwrite the request objects
+with a single object.
+
+=cut
+
+sub object {
+  my ($r,$object) = @_;
+  $r->objects([$object]) if ($object);
+  return undef unless $r->objects();
+  return $r->objects->[0];
+}
+
 =item template_args
 
     $self->template_args->{foo} = 'bar';
 
 Get/set a hash of template variables.
 
+Maypole reserved words for template variables will over-ride values in template_variables.
+
+Reserved words are : r, request, object, objects, base, config and errors, as well as the
+current class or object name.
+
 =item stash
 
-A place to put custom application data. Not used by Maypole itself. 
+A place to put custom application data. Not used by Maypole itself.
 
 =item template