X-Git-Url: https://git.decadent.org.uk/gitweb/?a=blobdiff_plain;f=lib%2FMaypole.pm;h=b55f7b924ec8309d148a5e3660212b1bae344771;hb=1970b15356f27bd73d99f6d8160088c616cea5cb;hp=fedd3e5af00af2e0d671cefae041f808db8f7c60;hpb=874ed7ac5abb5f23093620925134ffccda52b840;p=maypole.git diff --git a/lib/Maypole.pm b/lib/Maypole.pm index fedd3e5..b55f7b9 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.7"; __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 } @@ -55,9 +52,17 @@ sub handler { my $class = shift; $class->init unless $class->init_done; my $r = bless { config => $class->config }, $class; - $r->get_request(); + $r->get_request(@_); $r->parse_location(); + my $status = $r->handler_guts(); + return $status unless $status == OK; + $r->{content_type} ||= "text/html"; + $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) { @@ -72,23 +77,21 @@ sub handler { $r->model_class->process($r); } else { # Otherwise, it's just a plain template. - $r->call_authenticate; # No harm in it delete $r->{model_class}; $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 { my $self = shift; my $config = $self->config; - $config->{ok_tables} = {map {$_ => 1} @{$config->{display_tables}}}; + $config->{ok_tables} ||= $config->{display_tables}; + $config->{ok_tables} = {map {$_=>1} @{$config->{ok_tables}}} + if ref $config->{ok_tables} eq "ARRAY"; warn "We don't have that table ($self->{table})" if $self->debug and not $config->{ok_tables}{$self->{table}}; return DECLINED() unless exists $config->{ok_tables}{$self->{table}};