use attributes;
__PACKAGE__->mk_accessors(
- qw/counter depth request response state action namespace/
+ qw/counter request response state action stack namespace/
);
attributes->import( __PACKAGE__, \&namespace, 'lvalue' );
+sub depth { scalar @{shift->stack||[]}; }
+#sub namespace { my $a = shift->stack->[-1]; ($a ? $a->namespace : ''); }
+
# Laziness++
*comp = \&component;
*req = \&request;
Contains the components.
+=item $c->context_class($class)
+
+Contains the context class.
+
=item $c->counter
Returns a hashref containing coderefs and execution counts.
sub dispatch { my $c = shift; $c->dispatcher->dispatch( $c, @_ ) }
+=item $c->dispatcher_class($class)
+
+Contains the dispatcher class.
+
=item dump_these
Returns a list of 2-element array references (name, structure) pairs that will
[ Request => $c->req ], [ Response => $c->res ], [ Stash => $c->stash ],;
}
+=item $c->engine_class($class)
+
+Contains the engine class.
+
=item $c->execute($class, $coderef)
Execute a coderef in given class and catch exceptions.
$action = "-> $action" if $callsub =~ /forward$/;
}
- $c->{depth}++;
+ push(@{$c->stack}, $code);
eval {
if ( $c->debug )
{
$c->state( &$code( $class, $c, @{ $c->req->args } ) || 0 );
}
};
- $c->{depth}--;
+ pop(@{$c->stack});
if ( my $error = $@ ) {
- if ( $error eq $DETACH ) { die $DETACH if $c->{depth} > 1 }
+ if ( $error eq $DETACH ) { die $DETACH if $c->depth > 1 }
else {
unless ( ref $error ) {
chomp $error;
my $c = $class->context_class->new(
{
counter => {},
- depth => 0,
+ stack => [],
request => $class->request_class->new(
{
arguments => [],
sub prepare_write { my $c = shift; $c->engine->prepare_write( $c, @_ ) }
+=item $c->request_class($class)
+
+Contains the request class.
+
+=item $c->response_class($class)
+
+Contains the response class.
+
=item $c->read( [$maxlength] )
Read a chunk of data from the request body. This method is designed to be