Fix various doc typoes.
[catagits/Catalyst-Runtime.git] / lib / Catalyst.pm
index 4255eec..6f111d9 100644 (file)
@@ -1,9 +1,5 @@
 package Catalyst;
 
-# we don't need really need this, but if we load it before MRO::Compat gets
-# loaded (via Moose and Class::MOP), we can avoid some nasty warnings
-use Class::C3;
-
 use Moose;
 extends 'Catalyst::Component';
 use bytes;
@@ -25,7 +21,7 @@ use Time::HiRes qw/gettimeofday tv_interval/;
 use URI ();
 use URI::http;
 use URI::https;
-use Scalar::Util qw/weaken blessed/;
+use Scalar::Util qw/weaken/;
 use Tree::Simple qw/use_weak_refs/;
 use Tree::Simple::Visitor::FindByUID;
 use attributes;
@@ -361,6 +357,13 @@ Almost the same as C<forward>, but does a full dispatch, instead of just
 calling the new C<$action> / C<$class-E<gt>$method>. This means that C<begin>,
 C<auto> and the method you go to are called, just like a new request.
 
+In addition both C<< $c->action >> and C<< $c->namespace >> are localized.
+This means, for example, that $c->action methods such as C<name>, C<class> and
+C<reverse> return information for the visited action when they are invoked
+within the visited action.  This is different from the behavior of C<forward>
+which continues to use the $c->action object from the caller action even when
+invoked from the callee.
+
 C<$c-E<gt>stash> is kept unchanged.
 
 In effect, C<visit> allows you to "wrap" another action, just as it
@@ -802,8 +805,8 @@ around config => sub {
     my $orig = shift;
     my $c = shift;
 
-    $c->log->warn("Setting config after setup has been run is not a good idea.")
-      if ( @_ and $c->setup_finished );
+    croak('Setting config after setup has been run is not allowed.')
+        if ( @_ and $c->setup_finished );
 
     $c->$orig(@_);
 };
@@ -839,13 +842,11 @@ sub debug { 0 }
 
 =head2 $c->dispatcher
 
-Returns the dispatcher instance. Stringifies to class name. See
-L<Catalyst::Dispatcher>.
+Returns the dispatcher instance. See L<Catalyst::Dispatcher>.
 
 =head2 $c->engine
 
-Returns the engine instance. Stringifies to the class name. See
-L<Catalyst::Engine>.
+Returns the engine instance. See L<Catalyst::Engine>.
 
 
 =head2 UTILITY METHODS
@@ -870,7 +871,7 @@ sub path_to {
 
 =head2 $c->plugin( $name, $class, @args )
 
-Helper method for plugins. It creates a classdata accessor/mutator and
+Helper method for plugins. It creates a class data accessor/mutator and
 loads and instantiates the given class.
 
     MyApp->plugin( 'prototype', 'HTML::Prototype' );
@@ -920,8 +921,8 @@ Catalyst> line.
 
 sub setup {
     my ( $class, @arguments ) = @_;
-    $class->log->warn("Running setup twice is not a good idea.")
-      if ( $class->setup_finished );
+    croak('Running setup more than once')
+        if ( $class->setup_finished );
 
     unless ( $class->isa('Catalyst') ) {
 
@@ -986,7 +987,8 @@ EOF
         my @plugins = map { "$_  " . ( $_->VERSION || '' ) } $class->registered_plugins;
 
         if (@plugins) {
-            my $t = Text::SimpleTable->new(74);
+            my $column_width = Catalyst::Utils::term_width() - 6;
+            my $t = Text::SimpleTable->new($column_width);
             $t->row($_) for @plugins;
             $class->log->debug( "Loaded plugins:\n" . $t->draw . "\n" );
         }
@@ -1018,7 +1020,8 @@ EOF
     $class->setup_components;
 
     if ( $class->debug ) {
-        my $t = Text::SimpleTable->new( [ 63, 'Class' ], [ 8, 'Type' ] );
+        my $column_width = Catalyst::Utils::term_width() - 8 - 9;
+        my $t = Text::SimpleTable->new( [ $column_width, 'Class' ], [ 8, 'Type' ] );
         for my $comp ( sort keys %{ $class->components } ) {
             my $type = ref $class->components->{$comp} ? 'instance' : 'class';
             $t->row( $comp, $type );
@@ -1049,8 +1052,33 @@ EOF
     Scope::Upper::reap(sub {
         my $meta = Class::MOP::get_metaclass_by_name($class);
         $meta->make_immutable unless $meta->is_immutable;
-    }, 1);
+    }, Scope::Upper::SCOPE(1));
+
+    $class->setup_finalize;
+}
+
+
+=head2 $app->setup_finalize
+
+A hook to attach modifiers to.
+Using C< after setup => sub{}; > doesn't work, because of quirky things done for plugin setup.
+Also better than C< setup_finished(); >, as that is a getter method.
+
+    sub setup_finalize {
+
+        my $app = shift;
 
+        ## do stuff, i.e., determine a primary key column for sessions stored in a DB
+
+        $app->next::method(@_);
+
+
+    }
+
+=cut
+
+sub setup_finalize {
+    my ($class) = @_;
     $class->setup_finished(1);
 }
 
@@ -2589,6 +2617,8 @@ obra: Jesse Vincent
 
 omega: Andreas Marienborg
 
+Oleg Kostyuk <cub.uanic@gmail.com>
+
 phaylon: Robert Sedlacek <phaylon@dunkelheit.at>
 
 rafl: Florian Ragwitz <rafl@debian.org>