X-Git-Url: https://git.decadent.org.uk/gitweb/?a=blobdiff_plain;f=lib%2FMaypole.pm;h=e4b36bc8e2ebcf4af32672de145aa154ad457dd8;hb=8237e83ed726d86f1ef754e51077eb2aff0cd4ed;hp=20a3c0e02f14c8593e824fdd9c59ce310a3a9320;hpb=cdf684b24a154500e5c05a49be8b5c7bae6a08a8;p=maypole.git diff --git a/lib/Maypole.pm b/lib/Maypole.pm index 20a3c0e..e4b36bc 100644 --- a/lib/Maypole.pm +++ b/lib/Maypole.pm @@ -4,16 +4,13 @@ use attributes (); use UNIVERSAL::require; use strict; use warnings; -our $VERSION = "1.3"; +our $VERSION = "1.4"; __PACKAGE__->mk_classdata($_) for qw( config init_done view_object ); __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,14 @@ sub handler { my $r = bless { config => $class->config }, $class; $r->get_request(); $r->parse_location(); + my $status = $r->handler_guts(); + return $status unless $status == OK; + $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 +81,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 { @@ -118,6 +119,16 @@ sub additional_data {} sub authenticate { return OK } +sub parse_path { + my $self = shift; + $self->{path} ||= "frontpage"; + my @pi = split /\//, $self->{path}; + shift @pi while @pi and !$pi[0]; + $self->{table} = shift @pi; + $self->{action} = shift @pi; + $self->{args} = \@pi; +} + =head1 NAME Maypole - MVC web application framework @@ -233,7 +244,8 @@ introduction to the process we're trying to automate. You should probably not use Maypole directly. Maypole is an abstract class which does not specify how to communicate with the outside world. The most popular subclass of Maypole is L, which interfaces -the Maypole framework to Apache mod_perl. +the Maypole framework to Apache mod_perl; another important one is +L. If you are implementing Maypole subclasses, you need to provide at least the C and C methods. You may also want to @@ -253,6 +265,8 @@ There's more documentation, examples, and a wiki at the Maypole web site: http://maypole.simon-cozens.org/ +L, L. + =head1 AUTHOR Simon Cozens, C