}
}
-=item $c->errors
+=item $c->error
-=item $c->errors($error, ...)
+=item $c->error($error, ...)
-=item $c->errors($arrayref)
+=item $c->error($arrayref)
-Returns an arrayref containing errors messages.
+Returns an arrayref containing error messages.
- my @errors = @{ $c->errors };
+ my @error = @{ $c->error };
Add a new error.
- $c->errors('Something bad happened');
+ $c->error('Something bad happened');
=cut
-sub errors {
+sub error {
my $c = shift;
- my $errors = ref $_[0] eq 'ARRAY' ? $_[0] : [@_];
- push @{ $c->{errors} }, @$errors;
- return $c->{errors};
+ my $error = ref $_[0] eq 'ARRAY' ? $_[0] : [@_];
+ push @{ $c->{error} }, @$error;
+ return $c->{error};
}
=item $c->finalize
$c->res->status(302);
}
- if ( !$c->res->output || $#{ $c->errors } >= 0 ) {
+ if ( !$c->res->output || $#{ $c->error } >= 0 ) {
$c->res->headers->content_type('text/html');
my $name = $c->config->{name} || 'Catalyst Application';
- my ( $title, $errors, $infos );
+ my ( $title, $error, $infos );
if ( $c->debug ) {
- $errors = join '<br/>', @{ $c->errors };
- $errors ||= 'No output';
+ $error = join '<br/>', @{ $c->error };
+ $error ||= 'No output';
$title = $name = "$name on Catalyst $Catalyst::VERSION";
my $req = encode_entities Dumper $c->req;
my $res = encode_entities Dumper $c->res;
}
else {
- $title = $name;
- $errors = '';
- $infos = <<"";
+ $title = $name;
+ $error = '';
+ $infos = <<"";
<pre>
(en) Please come back later
(de) Bitte versuchen sie es spaeter nocheinmal
margin: 10px;
-moz-border-radius: 10px;
}
- div.errors {
+ div.error {
background-color: #977;
border: 1px solid #755;
padding: 8px;
</head>
<body>
<div class="box">
- <div class="errors">$errors</div>
+ <div class="error">$error</div>
<div class="infos">$infos</div>
<div class="name">$name</div>
</div>
}
my $results = $c->get_action( $command, $namespace );
if ( @{$results} ) {
- if ( $command =~ /^\!/ ) {
- for my $result ( @{$results} ) {
- my ( $class, $code ) = @{ $result->[0] };
- $c->state( $c->process( $class, $code ) );
- }
- }
- else {
- return 0 unless my $result = $results->[0];
- if ( $result->[2] ) {
+ unless ( $command =~ /^\!/ ) {
+ $results = [ pop @{$results} ];
+ if ( $results->[0]->[2] ) {
$c->log->debug(qq/Couldn't forward "$command" to regex action/)
if $c->debug;
return 0;
}
- my ( $class, $code ) = @{ $result->[0] };
- $class = $c->components->{$class} || $class;
- $c->state( $c->process( $class, $code ) );
}
}
else {
my $method = shift || 'process';
if ( my $code = $class->can($method) ) {
$c->actions->{reverse}->{"$code"} = "$class->$method";
- $class = $c->comp($class) || $class;
- $c->state( $c->process( $class, $code ) );
+ $results = [ [ [ $class, $code ] ] ];
}
else {
$c->log->debug(qq/Couldn't forward to "$class->$method"/)
return 0;
}
}
+ for my $result ( @{$results} ) {
+ $c->state( $c->process( @{ $result->[0] } ) );
+ }
return $c->state;
}
my $result = $c->actions->{private}->{ $parent->getUID }->{$action};
push @results, [$result] if $result;
my $visitor = Tree::Simple::Visitor::FindByPath->new;
+ my $local;
for my $part ( split '/', $namespace ) {
+ $local = undef;
$visitor->setSearchPath($part);
$parent->accept($visitor);
my $child = $visitor->getResult;
my $uid = $child->getUID if $child;
my $match = $c->actions->{private}->{$uid}->{$action} if $uid;
+ return [ [$match] ] if ( $match && $match =~ /^?.*/ );
+ $local = $c->actions->{private}->{$uid}->{"?$action"} if $uid;
push @results, [$match] if $match;
$parent = $child if $child;
}
+ return [ [$local] ] if $local;
return \@results;
}
elsif ( my $p = $c->actions->{plain}->{$action} ) { return [ [$p] ] }
}
for my $result ( @{ $c->get_action( $action, $namespace ) } ) {
$c->state( $c->process( @{ $result->[0] } ) );
+ last unless $action =~ /^\!.*/;
}
for my $end ( @{ $c->get_action( '!end', $namespace ) } ) {
$c->state( $c->process( @{ $end->[0] } ) );
? qq/Unknown resource "$path"/
: "No default action defined";
$c->log->error($error) if $c->debug;
- $c->errors($error);
+ $c->error($error);
}
return $c->finalize;
};
=item $c->prepare($r)
-Turns the engine-specific request (Apache, CGI...) into a Catalyst context.
+Turns the engine-specific request( Apache, CGI ... )
+into a Catalyst context .
=cut
=item $c->process($class, $coderef)
Process a coderef in given class and catch exceptions.
-Errors are available via $c->errors.
+Errors are available via $c->error.
=cut
sub process {
my ( $c, $class, $code ) = @_;
- my $status;
+ $class = $c->comp($class) || $class;
+ $c->state(0);
eval {
if ( $c->debug )
{
my $action = $c->actions->{reverse}->{"$code"} || "$code";
- my $elapsed;
- ( $elapsed, $status ) =
+ my ( $elapsed, @state ) =
$c->benchmark( $code, $class, $c, @{ $c->req->args } );
$c->log->info( sprintf qq/Processing "$action" took %fs/, $elapsed )
if $c->debug;
+ $c->state(@state);
}
- else { $status = &$code( $class, $c, @{ $c->req->args } ) }
+ else { $c->state( &$code( $class, $c, @{ $c->req->args } ) ) }
};
if ( my $error = $@ ) {
chomp $error;
$error = qq/Caught exception "$error"/;
$c->log->error($error);
- $c->errors($error) if $c->debug;
- return 0;
+ $c->error($error) if $c->debug;
+ $c->state(0);
}
- return $status;
+ return $c->state;
}
=item $c->run
sub set_action {
my ( $c, $action, $code, $namespace ) = @_;
-
my $prefix = '';
if ( $action =~ /^\?(.*)$/ ) {
my $prefix = $1 || '';
$action = $prefix . _prefix( $namespace, $action );
$c->actions->{plain}->{$action} = [ $namespace, $code ];
}
- if ( $action =~ /^\/(.*)\/$/ ) {
+ elsif ( $action =~ /^\/(.*)\/$/ ) {
my $regex = $1;
$c->actions->{compiled}->{qr#$regex#} = $action;
$c->actions->{regex}->{$action} = [ $namespace, $code ];
$c->actions->{private}->{$uid}->{$action} = [ $namespace, $code ];
$action = "!$action";
}
- else {
- $c->actions->{plain}->{$action} = [ $namespace, $code ];
- }
-
+ else { $c->actions->{plain}->{$action} = [ $namespace, $code ] }
my $reverse = $prefix ? "$action ($prefix)" : $action;
$c->actions->{reverse}->{"$code"} = $reverse;
-
$c->log->debug(qq/"$namespace" defined "$action" as "$code"/)
if $c->debug;
}
sub _prefix {
my ( $class, $name ) = @_;
my $prefix = _class2prefix($class);
+ warn "$class - $name - $prefix";
$name = "$prefix/$name" if $prefix;
return $name;
}