package Maypole;
-use base qw(Class::Accessor Class::Data::Inheritable);
+use base qw(Class::Accessor::Fast Class::Data::Inheritable);
use attributes ();
use UNIVERSAL::require;
use strict;
use warnings;
use Maypole::Config;
-our $VERSION = "1.8";
+our $VERSION = '2.0';
__PACKAGE__->mk_classdata($_) for qw( config init_done view_object );
__PACKAGE__->mk_accessors(
- qw( ar params query objects model_class
- args action template )
+ qw( ar params query objects model_class template_args output path
+ args action template error document_encoding content_type table)
);
__PACKAGE__->config( Maypole::Config->new() );
__PACKAGE__->init_done(0);
my $config = $class->config;
$config->view || $config->view("Maypole::View::TT");
$config->view->require;
- die "Couldn't load the view class ".$config->view.": $@" if $@;
- $config->display_tables || $config->display_tables([ $class->config->tables ]);
+ die "Couldn't load the view class " . $config->view . ": $@" if $@;
+ $config->display_tables
+ || $config->display_tables( [ $class->config->tables ] );
$class->view_object( $class->config->view->new );
$class->init_done(1);
return $status;
}
+# The root of all evil
sub handler_guts {
my $r = shift;
$r->model_class( $r->config->model->class_of( $r, $r->{table} ) );
if ( my $error = $@ ) {
$status = $r->call_exception($error);
if ( $status != OK ) {
- warn "caught view error: $error";
+ warn "caught view error: $error" if $r->debug;
return $r->debug ? $r->view_object->error( $r, $error ) : ERROR;
}
}
sub is_applicable {
my $self = shift;
my $config = $self->config;
- $config->ok_tables || $config->ok_tables($config->display_tables);
- $config->ok_tables ({ map { $_ => 1 } @{ $config->ok_tables } })
+ $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})"
if $self->debug
this:
package ProductDatabase;
- use base 'Apache::MVC';
+ use base 'Maypole::Application';
__PACKAGE__->set_database("dbi:mysql:products");
ProductDatabase->config->uri_base = "http://your.site/catalogue/";
ProductDatabase::Product->has_a("category" => ProductDatabase::Category);
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; another important one is
-L<CGI::Maypole>.
+L<CGI::Maypole>. However, if you just don't care, use Maypole::Application,
+and it will choose the right one for you.
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>.
+L<Maypole::Application>,L<Apache::MVC>, L<CGI::Maypole>.
=head1 MAINTAINER
=head1 THANK YOU
-Jesse Scheidlower, Jody Belka, Markus Ramberg, Mickael Joanne, Simon Flack,
-Veljko Vidovic and all the others who've helped.
+Danijel Milicevic, Jesse Scheidlower, Jody Belka, Marcus Ramberg,
+Mickael Joanne, Simon Flack, Veljko Vidovic and all the others who've helped.
=head1 LICENSE