]> git.decadent.org.uk Git - maypole.git/blobdiff - lib/Maypole/Application.pm
tidied up inheritance in Mp::App - bugs 12923 & 14120
[maypole.git] / lib / Maypole / Application.pm
index cd4318f9c48f786f1490225eccea642064d6553a..60542f987eefed9e5a4b058fc0cbe22026a7867c 100644 (file)
@@ -6,11 +6,11 @@ use UNIVERSAL::require;
 use Maypole;
 use Maypole::Config;
 
-our @ISA;
-our $VERSION = '2.09';
+our $VERSION = '2.11';
 
 sub import {
-    my ( $class, @plugins ) = @_;
+    shift; # not interested in this - we manipulate the caller's @ISA directly
+    my @plugins = @_;
     my $caller = caller(0);
     
     my $frontend = 'Apache::MVC' if $ENV{MOD_PERL};
@@ -26,13 +26,14 @@ sub import {
     $frontend ||= 'CGI::Maypole';
     
     $frontend->require or die "Loading $frontend frontend failed: $@";
-    push @ISA, $frontend;
 
     my $autosetup=0;
+    my $autoinit=0;
     my @plugin_modules;
     {
         foreach (@plugins) {
             if    (/^\-Setup$/) { $autosetup++; }
+            elsif (/^\-Init$/)  { $autoinit++ }
             elsif (/^\-Debug(\d*)$/) {
                 my $d = $1 || 1;
                 no strict 'refs';
@@ -44,7 +45,6 @@ sub import {
                 my $plugin = "Maypole::Plugin::$_";
                 if ($plugin->require) {
                     push @plugin_modules, "Maypole::Plugin::$_";
-                   unshift @ISA, "Maypole::Plugin::$_";
                     warn "Loaded plugin: $plugin for $caller"
                         if $caller->can('debug') && $caller->debug;
                 } else {
@@ -55,10 +55,11 @@ sub import {
         }
     }
     no strict 'refs';
-    push @{"${caller}::ISA"}, @plugin_modules, $class;
+    push @{"${caller}::ISA"}, @plugin_modules, $frontend;
     $caller->config(Maypole::Config->new);
     $caller->config->masonx({}) if $masonx;
     $caller->setup() if $autosetup;
+    $caller->init() if $autosetup && $autoinit;
 }
 
 1;
@@ -88,7 +89,7 @@ So Maypole::Plugin::Config::YAML becomes Config::YAML.
 
     use Maypole::Application qw(Config::YAML);
 
-You can also set special flags like -Setup and -Debug.
+You can also set special flags like -Setup, -Debug and -Init.
 
     use Maypole::Application qw(-Debug Config::YAML -Setup);
 
@@ -108,6 +109,25 @@ Note that no options are passed to C<setup()>. You must ensure that the
 required model config parameters are set in C<MyApp-E<gt>config>. See
 L<Maypole::Config> for more information.
 
+=head2 -Init
+
+    use Maypole::Application qw(-Setup -Init);
+    
+is equivalent to
+
+    use Maypole::Application;
+    MyApp->setup;
+    MyApp->init;
+    
+Note that the C<-Setup> flag is required for the C<-Init> flag to work.
+
+In persistent environments (e.g. C<mod_perl>), it is useful to call C<init> 
+once in the parent server, rather than at the beginning of the first request
+to each child server, in order to share the view code loaded during C<init>. 
+Note that you must supply all the config data to your app before calling 
+C<setup> and C<init>, probably by using one of the C<Maypole::Plugin::Config::*> 
+plugins.
+
 =head2 -Debug
 
     use Maypole::Application qw(-Debug);