From 0f0ccfbbe2488b34841e5af2ecedd9f256c8489f Mon Sep 17 00:00:00 2001
From: Simon Cozens <simon@simon-cozens.org>
Date: Tue, 6 Apr 2004 10:39:10 +0000
Subject: [PATCH] Add constants; refactor View classes and tests to use them;
 refactor out handler_guts to allow subcomponent stuff.

git-svn-id: http://svn.maypole.perl.org/Maypole/trunk@117 48953598-375a-da11-a14b-00016c27c3ee
---
 MANIFEST                  |  3 +++
 doc/Beer.pod              |  3 +++
 doc/StandardTemplates.pod |  1 +
 lib/Maypole.pm            | 22 +++++++++++++---------
 lib/Maypole/Constants.pm  |  7 +++++++
 t/1.t                     |  5 +++--
 6 files changed, 30 insertions(+), 11 deletions(-)
 create mode 100644 lib/Maypole/Constants.pm

diff --git a/MANIFEST b/MANIFEST
index 08000a6..f4cf27a 100644
--- 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
diff --git a/doc/Beer.pod b/doc/Beer.pod
index 33baddf..fa8fe84 100644
--- a/doc/Beer.pod
+++ b/doc/Beer.pod
@@ -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
diff --git a/doc/StandardTemplates.pod b/doc/StandardTemplates.pod
index 88727fd..e5eb9f0 100644
--- a/doc/StandardTemplates.pod
+++ b/doc/StandardTemplates.pod
@@ -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
diff --git a/lib/Maypole.pm b/lib/Maypole.pm
index fedd3e5..46fb7d4 100644
--- a/lib/Maypole.pm
+++ b/lib/Maypole.pm
@@ -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
index 0000000..7bddbac
--- /dev/null
+++ b/lib/Maypole/Constants.pm
@@ -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 77c1f9f..be5e6bd 100644
--- 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");
-- 
2.39.5