package Maypole;
use base qw(Class::Accessor Class::Data::Inheritable);
use attributes ();
-use Class::DBI::Loader;
use UNIVERSAL::require;
use Apache::Constants ":common";
use strict;
__PACKAGE__->init_done(0);
-sub import {
- my $real = shift;
- if ($real ne "Apache::MVC") {
- no strict 'refs';
- *{$real."::handler"} = sub { Apache::MVC::handler($real, @_) };
- }
-}
-
sub set_database {
- my ($calling_class, $dsn) = @_;
+ my $calling_class = shift;
$calling_class = ref $calling_class if ref $calling_class;
my $config = $calling_class->config;
- $config->{model} ||= "Apache::MVC::Model::CDBI";
+ $config->{model} ||= "Maypole::Model::CDBI";
$config->{model}->require;
- $config->{dsn} = $dsn;
- $config->{loader} = Class::DBI::Loader->new(
- namespace => $calling_class,
- dsn => $dsn
- );
- $config->{classes} = [ $config->{loader}->classes ];
+ $config->{model}->setup_database($config, $calling_class, @_);
for my $subclass (@{$config->{classes}}) {
no strict 'refs';
unshift @{$subclass."::ISA"}, $config->{model};
sub init {
my $class = shift;
my $config = $class->config;
- $config->{view} ||= "Apache::MVC::View::TT";
+ $config->{view} ||= "Maypole::View::TT";
$config->{view}->require;
- $config->{display_tables} ||= [ $class->config->{loader}->tables ];
+ $config->{display_tables} ||= [ @{$class->config->{tables}} ];
$class->view_object($class->config->{view}->new);
$class->init_done(1);
}
-sub class_of {
- my ($self, $table) = @_;
- return $self->config->{loader}->_table2class($table);
-}
-
sub handler {
- # See Apache::MVC::Workflow before trying to understand this.
+ # See Maypole::Workflow before trying to understand this.
my $class = shift;
$class->init unless $class->init_done;
my $r = bless { config => $class->config }, $class;
$r->get_request();
$r->parse_location();
- $r->model_class($r->class_of($r->{table}));
+ $r->model_class($r->config->{model}->class_of($r, $r->{table}));
my $status = $r->is_applicable;
if ($status == OK) {
$status = $r->call_authenticate;
=head1 SYNOPSIS
-See L<Apache::MVC>.
+See L<Maypole>.
=head1 DESCRIPTION
this:
package ProductDatabase;
- use base 'Apache::MVC';
+ use base 'Maypole';
__PACKAGE__->set_database("dbi:mysql:products");
BeerDB->config->{uri_base} = "http://your.site/catalogue/";
ProductDatabase::Product->has_a("category" => ProductDatabase::Category);
=head1 HOW IT WORKS
-There's some documentation for the workflow in L<Apache::MVC::Workflow>,
+There's some documentation for the workflow in L<Maypole::Workflow>,
but the basic idea is that a URL part like C<product/list> gets
translated into a call to C<ProductDatabase::Product-E<gt>list>. This
propagates the request with a set of objects from the database, and then
subclass the model class, and configure your class slightly differently:
package ProductDatabase::Model;
- use base 'Apache::MVC::Model::CDBI';
+ use base 'Maypole::Model::CDBI';
sub supersearch :Exported {
my ($self, $request) = @_;