package Maypole;
use base qw(Class::Accessor::Fast Class::Data::Inheritable);
-use attributes ();
use UNIVERSAL::require;
use strict;
use warnings;
use Maypole::Config;
use Maypole::Constants;
-our $VERSION = '2.0';
+our $VERSION = '2.05';
__PACKAGE__->mk_classdata($_) for qw( config init_done view_object );
__PACKAGE__->mk_accessors(
$calling_class = ref $calling_class if ref $calling_class;
{
no strict 'refs';
+ no warnings 'redefine';
# Naughty.
*{ $calling_class . "::handler" } =
$config->view->require;
die "Couldn't load the view class " . $config->view . ": $@" if $@;
$config->display_tables
- || $config->display_tables( [ $class->config->tables ] );
+ || $config->display_tables( $class->config->tables );
$class->view_object( $class->config->view->new );
$class->init_done(1);
# See Maypole::Workflow before trying to understand this.
my ( $class, $req ) = @_;
$class->init unless $class->init_done;
- my $r = bless { config => $class->config }, $class;
+ my $r = bless { template_args => {}, config => $class->config }, $class;
$r->get_request($req);
$r->parse_location();
my $status = $r->handler_guts();
sub handler_guts {
my $r = shift;
$r->model_class( $r->config->model->class_of( $r, $r->{table} ) );
+
my $applicable = $r->is_applicable;
unless ( $applicable == OK ) {
$config->ok_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})"
+ warn "We don't have that table ($self->{table}).\n"
+ . "Available tables are: "
+ . join( ",", @{ $config->{display_tables} } )
if $self->debug
- and not $config->ok_tables->{ $self->{table} };
+ and not $config->ok_tables->{ $self->{table} }
+ and $self->{action};
return DECLINED() unless exists $config->ok_tables->{ $self->{table} };
# Is it public?
Maypole
backend. Otherwise, see L<Maypole::Config/"template_root">
+=head3 get_request
+
+You should only need to define this method if you are writing a new
+Maypole backend. It should return something that looks like an Apache
+or CGI request object, it defaults to blank.
+
+
=head3 is_applicable
Returns a Maypole::Constant to indicate whether the request is valid.
Sends the output and additional headers to the user.
+=head3 call_authenticate
+
+This method first checks if the relevant model class
+can authenticate the user, or falls back to the default
+authenticate method of your Maypole application.
+
+
+=head3 call_exception
+
+This model is called to catch exceptions, first after authenticate
+,then after processing the model class, and finally to check for
+exceptions from the view class.
+
+This method first checks if the relevant model class
+can handle exceptions the user, or falls back to the default
+exception method of your Maypole application.
+
+
+=head3 handler
+
+This method sets up the class if it's not done yet, sets some
+defaults and leaves the dirty work to handler_guts.
+
+=head3 handler_guts
+
+This is the core of maypole. You don't want to know.
+
=head1 SEE ALSO
There's more documentation, examples, and a wiki at the Maypole web
L<Maypole::Application>,L<Apache::MVC>, L<CGI::Maypole>.
-=head1 MAINTAINER
+=head1 AUTHOR
Sebastian Riedel, c<sri@oook.de>
-=head1 AUTHOR
+=head1 AUTHOR EMERITUS
Simon Cozens, C<simon@cpan.org>
-=head1 THANK YOU
+=head1 THANKS TO
-Danijel Milicevic, Jesse Scheidlower, Jody Belka, Marcus Ramberg,
-Mickael Joanne, Simon Flack, Veljko Vidovic and all the others who've
-helped.
+Danijel Milicevic, Dave Slack, Jesse Sheidlower, Jody Belka, Marcus Ramberg,
+Mickael Joanne, Randal Schwartz, Simon Flack, Steve Simms, Veljko Vidovic
+and all the others who've helped.
=head1 LICENSE