From: Simon Cozens Date: Wed, 11 Feb 2004 15:02:01 +0000 (+0000) Subject: Starting to genericize it. X-Git-Tag: 2.10~305 X-Git-Url: https://git.decadent.org.uk/gitweb/?a=commitdiff_plain;h=2317e7e16027c6fa312dbdff201d83084412a463;p=maypole.git Starting to genericize it. git-svn-id: http://svn.maypole.perl.org/Maypole/trunk@57 48953598-375a-da11-a14b-00016c27c3ee --- diff --git a/lib/Maypole.pm b/lib/Maypole.pm index 55aa509..deb2071 100644 --- a/lib/Maypole.pm +++ b/lib/Maypole.pm @@ -1,7 +1,6 @@ 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; @@ -14,26 +13,13 @@ __PACKAGE__->config({}); __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}; @@ -45,28 +31,23 @@ sub set_database { 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; @@ -145,7 +126,7 @@ Maypole - MVC web application framework =head1 SYNOPSIS -See L. +See L. =head1 DESCRIPTION @@ -171,7 +152,7 @@ for the designers to customize, and then write an Apache handler like 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); @@ -208,7 +189,7 @@ For a full example, see the included "beer database" application. =head1 HOW IT WORKS -There's some documentation for the workflow in L, +There's some documentation for the workflow in L, but the basic idea is that a URL part like C gets translated into a call to Clist>. This propagates the request with a set of objects from the database, and then @@ -219,7 +200,7 @@ If there's another action you want the system to do, you need to either 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) = @_;