From: David Baird Date: Mon, 3 Oct 2005 11:31:17 +0000 (+0000) Subject: Slight refactoring of handler_guts(), removed direct X-Git-Tag: 2.11~136 X-Git-Url: https://git.decadent.org.uk/gitweb/?p=maypole.git;a=commitdiff_plain;h=a3f1ea29173422868a8ebee97918e0e4d0f40367 Slight refactoring of handler_guts(), removed direct access to hash elements git-svn-id: http://svn.maypole.perl.org/Maypole/trunk@382 48953598-375a-da11-a14b-00016c27c3ee --- diff --git a/lib/Maypole.pm b/lib/Maypole.pm index 5bb07d5..e9aec84 100644 --- a/lib/Maypole.pm +++ b/lib/Maypole.pm @@ -9,6 +9,11 @@ use Maypole::Headers; our $VERSION = '2.10'; +# proposed privacy conventions: +# - no leading underscore - public to custom application code and plugins +# - single leading underscore - private to the main Maypole stack - *not* including plugins +# - double leading underscore - private to the current package + __PACKAGE__->mk_classdata($_) for qw( config init_done view_object ); __PACKAGE__->mk_accessors( qw( params query objects model_class template_args output path @@ -75,69 +80,110 @@ sub handler : method template_args => {}, config => $class->config }, $class; + $r->headers_out(Maypole::Headers->new); + $r->get_request($req); + $r->parse_location(); + my $status = $r->handler_guts(); + return $status unless $status == OK; + $r->send_output; + return $status; } # The root of all evil -sub handler_guts { - my $r = shift; - $r->model_class( $r->config->model->class_of( $r, $r->{table} ) ); +sub handler_guts +{ + my ($r) = @_; + + $r->__load_model; my $applicable = $r->is_applicable; - unless ( $applicable == OK ) { - + + unless ( $applicable == OK ) + { # It's just a plain template - delete $r->{model_class}; - $r->{path} =~ s{/$}{}; # De-absolutify - $r->template( $r->{path} ); + $r->model_class(undef); + + my $path = $r->path; + $path =~ s{/$}{}; # De-absolutify + $r->path($path); + + $r->template($r->path); } # We authenticate every request, needed for proper session management my $status; + eval { $status = $r->call_authenticate }; - if ( my $error = $@ ) { + + if ( my $error = $@ ) + { $status = $r->call_exception($error); - if ( $status != OK ) { + + if ( $status != OK ) + { warn "caught authenticate error: $error"; - return $r->debug ? $r->view_object->error( $r, $error ) : ERROR; + return $r->debug ? $r->view_object->error($r, $error) : ERROR; } } - if ( $r->debug and $status != OK and $status != DECLINED ) { + + if ( $r->debug and $status != OK and $status != DECLINED ) + { $r->view_object->error( $r, "Got unexpected status $status from calling authentication" ); } + return $status unless $status == OK; # We run additional_data for every request $r->additional_data; - if ( $applicable == OK ) { + + if ( $applicable == OK ) + { eval { $r->model_class->process($r) }; - if ( my $error = $@ ) { + + if ( my $error = $@ ) + { $status = $r->call_exception($error); - if ( $status != OK ) { + if ( $status != OK ) + { warn "caught model error: $error"; - return $r->debug ? $r->view_object->error( $r, $error ) : ERROR; + return $r->debug ? $r->view_object->error($r, $error) : ERROR; } } } - if ( !$r->{output} ) { # You might want to do it yourself + + if ( !$r->output ) + { # You might want to do it yourself eval { $status = $r->view_object->process($r) }; - if ( my $error = $@ ) { + + if ( my $error = $@ ) + { $status = $r->call_exception($error); - if ( $status != OK ) { + + if ( $status != OK ) + { warn "caught view error: $error" if $r->debug; - return $r->debug ? $r->view_object->error( $r, $error ) : ERROR; + return $r->debug ? $r->view_object->error($r, $error) : ERROR; } } + return $status; } - else { return OK; } + + return OK; +} + +sub __load_model +{ + my ($r) = @_; + $r->model_class( $r->config->model->class_of($r, $r->table) ); } sub is_applicable {