]> git.decadent.org.uk Git - maypole.git/blobdiff - lib/Maypole.pm
Lots of documentation.
[maypole.git] / lib / Maypole.pm
index deb207193303e6f3366caed0786f78f8ce83fdbf..b55f4f810ef18a0bed337f5ace24765868062914 100644 (file)
@@ -13,9 +13,14 @@ __PACKAGE__->config({});
 __PACKAGE__->init_done(0);
 
 
-sub set_database {
+sub setup {
     my $calling_class = shift;
     $calling_class = ref $calling_class if ref $calling_class;
+    {
+      no strict 'refs';
+      # Naughty.
+      *{$calling_class."::handler"} = sub { Maypole::handler($calling_class, @_) };
+    }
     my $config = $calling_class->config;
     $config->{model} ||= "Maypole::Model::CDBI";
     $config->{model}->require;
@@ -64,28 +69,6 @@ sub handler {
     return $r->view_object->process($r);
 }
 
-sub get_request {
-    my $self = shift;
-    require Apache; require Apache::Request; 
-    $self->{ar} = Apache::Request->new(Apache->request);
-}
-
-sub parse_location {
-    my $self = shift;
-    $self->{path} = $self->{ar}->uri;
-    my $loc = $self->{ar}->location;
-    $self->{path} =~ s/^$loc//; # I shouldn't need to do this?
-    $self->{path} ||= "frontpage";
-    my @pi = split /\//, $self->{path};
-    shift @pi while @pi and !$pi[0];
-    $self->{table} = shift @pi;
-    $self->{action} = shift @pi;
-    $self->{args} = \@pi;
-
-    $self->{params} = { $self->{ar}->content };
-    $self->{query}  = { $self->{ar}->args };
-}
-
 sub is_applicable {
     my $self = shift;
     my $config = $self->config;
@@ -118,8 +101,6 @@ sub additional_data {}
 
 sub authenticate { return OK }
 
-1;
-
 =head1 NAME
 
 Maypole - MVC web application framework
@@ -227,6 +208,22 @@ systems and database abstraction layers as time goes on. The article at
 C<http://www.perl.com/pub/a/2003/07/15/nocode.html> is a great
 introduction to the process we're trying to automate.
 
+=head1 USING MAYPOLE
+
+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.
+
+If you are implementing Maypole subclasses, you need to provide at least 
+the C<get_request> and C<parse_location> methods. See the
+L<Maypole::Workflow> documentation for what these are expected to do.
+
+=cut
+
+sub get_request { die "Do not use Maypole directly; use Apache::MVC or similar" }
+sub parse_location { die "Do not use Maypole directly; use Apache::MVC or similar" }
+
 =head1 AUTHOR
 
 Simon Cozens, C<simon@cpan.org>
@@ -234,3 +231,8 @@ Simon Cozens, C<simon@cpan.org>
 =head1 LICENSE
 
 You may distribute this code under the same terms as Perl itself.
+
+=cut
+
+1;
+