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 }
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) {
$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}};
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<Apache::MVC>, which interfaces
-the Maypole framework to Apache mod_perl.
+the Maypole framework to Apache mod_perl; another important one is
+L<CGI::Maypole>.
If you are implementing Maypole subclasses, you need to provide at least
the C<parse_location> and C<send_output> methods. You may also want to
http://maypole.simon-cozens.org/
+L<Apache::MVC>, L<CGI::Maypole>.
+
=head1 AUTHOR
Simon Cozens, C<simon@cpan.org>