]> git.decadent.org.uk Git - maypole.git/commitdiff
Add constants; refactor View classes and tests to use them; refactor out handler_guts
authorSimon Cozens <simon@simon-cozens.org>
Tue, 6 Apr 2004 10:39:10 +0000 (10:39 +0000)
committerSimon Cozens <simon@simon-cozens.org>
Tue, 6 Apr 2004 10:39:10 +0000 (10:39 +0000)
to allow subcomponent stuff.

git-svn-id: http://svn.maypole.perl.org/Maypole/trunk@117 48953598-375a-da11-a14b-00016c27c3ee

MANIFEST
doc/Beer.pod
doc/StandardTemplates.pod
lib/Maypole.pm
lib/Maypole/Constants.pm [new file with mode: 0644]
t/1.t

index 08000a654c590ad66c69f6fefb62135fada39556..f4cf27a0009c6965ea5604f0d6df9c7e18a7ca2b 100644 (file)
--- a/MANIFEST
+++ b/MANIFEST
@@ -11,8 +11,11 @@ doc/View.pod
 doc/makedoc.pl
 ex/BeerDB.pm
 lib/Maypole/CLI.pm
+lib/Maypole/Constants.pm
 lib/Maypole/Model/Base.pm
 lib/Maypole/Model/CDBI.pm
+lib/Maypole/View/Base.pm
+lib/Maypole/View/Mason.pm
 lib/Maypole/View/TT.pm
 lib/Maypole/Workflow.pod
 lib/Maypole.pm
index 33baddf297dcded13f23825fabf3bf26cc5eb95a..fa8fe8455b78b37879551013dbe2ceadaf441938 100644 (file)
@@ -1,5 +1,8 @@
 =head1 The Beer Database, Twice
 
+We briefly introduced the "beer database" example in the L<About.pod>
+material; 
+
 =head2 The big beer problem
 
 =head2 The easy way
index 88727fd45356cd6559c04d6308dc70cd3928807d..e5eb9f06b2f32aeaebde9438469bb90301b9b2d1 100644 (file)
@@ -285,3 +285,4 @@ The C<search> template argument is used to distinguish between the two cases:
     <h2> Listing of all [% classmetadata.plural %]</h2>
     [% END %]
 
+=head1 Customizing Generic CRUD Applications
index fedd3e5af00af2e0d671cefae041f808db8f7c60..46fb7d4ac953451059e795351d89fbbc3652431a 100644 (file)
@@ -10,10 +10,7 @@ __PACKAGE__->mk_accessors ( qw( ar params query objects model_class
 args action template ));
 __PACKAGE__->config({});
 __PACKAGE__->init_done(0);
-
-# Ape Apache::Constants interface
-use constant OK => 0;
-use constant DECLINED => -1;
+use Maypole::Constants;
 
 sub debug { 0 }
 
@@ -57,7 +54,17 @@ sub handler {
     my $r = bless { config => $class->config }, $class;
     $r->get_request();
     $r->parse_location();
+    my $status = $r->handler_guts();
+    if ($status != OK) {
+        warn "NOT OK!";
+        return $status;
+    }
+    $r->send_output;
+    return $status;
+}
 
+sub handler_guts {
+    my $r = shift;
     $r->model_class($r->config->{model}->class_of($r, $r->{table}));
     my $status = $r->is_applicable;
     if ($status == OK) { 
@@ -77,12 +84,9 @@ sub handler {
         $r->{path} =~ s{/}{}; # De-absolutify
         $r->template($r->{path});
     }
-    $status = OK;
     if (!$r->{output}) { # You might want to do it yourself
-        $status = $r->view_object->process($r);
-    }
-    $r->send_output;
-    return $status;
+        return $r->view_object->process($r);
+    } else { return OK; }
 }
 
 sub is_applicable {
diff --git a/lib/Maypole/Constants.pm b/lib/Maypole/Constants.pm
new file mode 100644 (file)
index 0000000..7bddbac
--- /dev/null
@@ -0,0 +1,7 @@
+package Maypole::Constants;
+use base 'Exporter';
+use constant OK => 0;
+use constant DECLINED => -1;
+use constant ERROR => -1;
+our @EXPORT = qw(OK DECLINED ERROR);
+1;
diff --git a/t/1.t b/t/1.t
index 77c1f9fdef874ff5a28d60a76fc46e2acdebd91b..be5e6bdac57f11a880cbf59019bab09e66887d00 100644 (file)
--- a/t/1.t
+++ b/t/1.t
@@ -1,14 +1,15 @@
 # vim:ft=perl
 use Test::More tests => 5;
 use Maypole::CLI qw(BeerDB);
+use Maypole::Constants;
 $ENV{MAYPOLE_TEMPLATES} = "t/templates";
 
 isa_ok( (bless {},"BeerDB") , "Maypole");
 
 @ARGV = ("http://localhost/beerdb/");
-is(BeerDB->handler, 200, "OK");
+is(BeerDB->handler, OK, "OK");
 like($Maypole::CLI::buffer, qr/frontpage/, "Got the front page");
 
 @ARGV = ("http://localhost/beerdb/beer/list");
-is(BeerDB->handler, 200, "OK");
+is(BeerDB->handler, OK, "OK");
 like($Maypole::CLI::buffer, qr/Organic Best/, "Found a beer in the list");