X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FCatalyst.pm;h=f2688c9697e08a534c99da588bea9307a5dbd0ea;hb=12e4ddc404a4d6252fa01b69f5b75bf3e42db463;hp=f726932958e94c12b7d4512d9c78d9cd31020970;hpb=108201b5c403a8db7f6fa7726110b1d1b1caac1b;p=catagits%2FCatalyst-Runtime.git
diff --git a/lib/Catalyst.pm b/lib/Catalyst.pm
index f726932..f2688c9 100644
--- a/lib/Catalyst.pm
+++ b/lib/Catalyst.pm
@@ -49,6 +49,7 @@ our $COUNT = 1;
our $START = time;
our $RECURSION = 1000;
our $DETACH = "catalyst_detach\n";
+our $GO = "catalyst_go\n";
__PACKAGE__->mk_classdata($_)
for qw/components arguments dispatcher engine log dispatcher_class
@@ -63,7 +64,7 @@ __PACKAGE__->stats_class('Catalyst::Stats');
# Remember to update this in Catalyst::Runtime as well!
-our $VERSION = '5.7099_03';
+our $VERSION = '5.71000';
sub import {
my ( $class, @arguments ) = @_;
@@ -327,6 +328,47 @@ When called with no arguments it escapes the processing chain entirely.
sub detach { my $c = shift; $c->dispatcher->detach( $c, @_ ) }
+=head2 $c->visit( $action [, \@arguments ] )
+
+=head2 $c->visit( $class, $method, [, \@arguments ] )
+
+Almost the same as C, but does a full dispatch, instead of just
+calling the new C<$action> / C<$class-E$method>. This means that C,
+C 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, C and
+C return information for the visited action when they are invoked
+within the visited action. This is different from the behavior of C
+which continues to use the $c->action object from the caller action even when
+invoked from the callee.
+
+C<$c-Estash> is kept unchanged.
+
+In effect, C allows you to "wrap" another action, just as it
+would have been called by dispatching from a URL, while the analogous
+C allows you to transfer control to another action as if it had
+been reached directly from a URL.
+
+=cut
+
+sub visit { my $c = shift; $c->dispatcher->visit( $c, @_ ) }
+
+=head2 $c->go( $action [, \@arguments ] )
+
+=head2 $c->go( $class, $method, [, \@arguments ] )
+
+Almost the same as C, but does a full dispatch like C,
+instead of just calling the new C<$action> /
+C<$class-E$method>. This means that C, C and the
+method you visit are called, just like a new request.
+
+C<$c-Estash> is kept unchanged.
+
+=cut
+
+sub go { my $c = shift; $c->dispatcher->go( $c, @_ ) }
+
=head2 $c->response
=head2 $c->res
@@ -914,7 +956,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" );
}
@@ -946,7 +989,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 );
@@ -1222,7 +1266,7 @@ sub welcome_message {
they can save you a lot of work.
script/${prefix}_create.pl -help
Also, be sure to check out the vast and growing
- collection of plugins for Catalyst on CPAN;
+ collection of plugins for Catalyst on CPAN;
you are likely to find what you need there.
@@ -1339,6 +1383,9 @@ sub execute {
if ( !ref($error) and $error eq $DETACH ) {
die $DETACH if($c->depth > 1);
}
+ elsif ( !ref($error) and $error eq $GO ) {
+ die $GO if($c->depth > 0);
+ }
else {
unless ( ref $error ) {
no warnings 'uninitialized';
@@ -2544,6 +2591,8 @@ obra: Jesse Vincent
omega: Andreas Marienborg
+Oleg Kostyuk
+
phaylon: Robert Sedlacek
sky: Arthur Bergman
@@ -2554,6 +2603,8 @@ Ulf Edvinsson
willert: Sebastian Willert
+batman: Jan Henning Thorsen
+
=head1 LICENSE
This library is free software, you can redistribute it and/or modify it under