use Path::Class;
use Time::HiRes qw/gettimeofday tv_interval/;
use URI;
-use Scalar::Util qw/weaken/;
+use Scalar::Util qw/weaken blessed/;
use Tree::Simple qw/use_weak_refs/;
use Tree::Simple::Visitor::FindByUID;
use attributes;
=head1 METHODS
-=head2 Information about the current request
+=head2 INFORMATION ABOUT THE CURRENT REQUEST
=head2 $c->action
Returns the current L<Catalyst::Request> object. See
L<Catalyst::Request>.
-=head2 Processing and response to the current request
+=head2 PROCESSING AND RESPONSE TO THE CURRENT REQUEST
=head2 $c->forward( $action [, \@arguments ] )
return $comp;
}
-=head2 Component Accessors
+=head2 COMPONENT ACCESSORS
=head2 $c->comp($name)
=cut
-=head2 Utility methods
+=head2 UTILITY METHODS
=head2 $c->path_to(@path)
$class = $c->component($class) || $class;
$c->state(0);
+ if ($c->depth >= $RECURSION) {
+ my $action = "$code";
+ $action = "/$action" unless $action =~ /\-\>/;
+ my $error = qq/Deep recursion detected calling "$action"/;
+ $c->log->error($error);
+ $c->error($error);
+ $c->state(0);
+ return $c->state;
+ }
+
+
if ( $c->debug ) {
my $action = "$code";
$action = "/$action" unless $action =~ /\-\>/;
$c->counter->{"$code"}++;
- if ( $c->counter->{"$code"} > $RECURSION ) {
- my $error = qq/Deep recursion detected in "$action"/;
- $c->log->error($error);
- $c->error($error);
- $c->state(0);
- return $c->state;
- }
-
# determine if the call was the result of a forward
# this is done by walking up the call stack and looking for a calling
# sub of Catalyst::forward before the eval
if ( $c->response->body && !$c->response->content_length ) {
# get the length from a filehandle
- if ( ref $c->response->body && $c->response->body->can('read') ) {
+ if ( blessed($c->response->body) && $c->response->body->can('read') ) {
if ( my $stat = stat $c->response->body ) {
$c->response->content_length( $stat->size );
}
sub get_actions { my $c = shift; $c->dispatcher->get_actions( $c, @_ ) }
-=head2 handle_request( $class, @arguments )
+=head2 $c->handle_request( $class, @arguments )
Called to handle each HTTP request.
=cut
{
- my %PLUGINS;
sub registered_plugins {
my $proto = shift;
- return sort keys %PLUGINS unless @_;
+ return sort keys %{$proto->_plugins} unless @_;
my $plugin = shift;
- return 1 if exists $PLUGINS{$plugin};
- return exists $PLUGINS{"Catalyst::Plugin::$plugin"};
+ return 1 if exists $proto->_plugins->{$plugin};
+ return exists $proto->_plugins->{"Catalyst::Plugin::$plugin"};
}
sub _register_plugin {
message => qq/Couldn't load ${type}plugin "$plugin", $error/ );
}
- $PLUGINS{$plugin} = 1;
+ $proto->_plugins->{$plugin} = 1;
unless ($instant) {
no strict 'refs';
unshift @{"$class\::ISA"}, $plugin;
sub setup_plugins {
my ( $class, $plugins ) = @_;
+ $class->_plugins( {} ) unless $class->_plugins;
$plugins ||= [];
for my $plugin ( reverse @$plugins ) {
=head2 $c->stack
-Returns the stack.
+Returns an arrayref of the internal execution stack (actions that are currently
+executing).
=head2 $c->write( $data )
Brian Cassidy
+Carl Franks
+
Christian Hansen
Christopher Hicks