From: Sebastian Riedel Date: Tue, 25 Oct 2005 15:03:26 +0000 (+0000) Subject: Added $c->error(0) support X-Git-Tag: 5.7099_04~1108 X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?p=catagits%2FCatalyst-Runtime.git;a=commitdiff_plain;h=00e6a2b71197b3b79b6d62a1c8154b7ca6702d2f Added $c->error(0) support --- diff --git a/lib/Catalyst.pm b/lib/Catalyst.pm index 3df8da8..b7bb450 100644 --- a/lib/Catalyst.pm +++ b/lib/Catalyst.pm @@ -401,21 +401,23 @@ of the path. =cut sub uri_for { - my ( $c, $path , @args) = @_; + my ( $c, $path, @args ) = @_; my $base = $c->request->base->clone; my $basepath = $base->path; $basepath =~ s/\/$//; $basepath .= '/'; my $match = $c->request->match; + # massage match, empty if absolute path $match =~ s/^\///; $match .= '/' if $match; $match = '' if $path =~ /^\//; $path =~ s/^\///; + # join args with '/', or a blank string - my $args=(scalar @args ? '/'.join('/',@args) : ''); - return URI->new_abs( URI->new_abs( "$path$args", "$basepath$match" ), $base ) - ->canonical; + my $args = ( scalar @args ? '/' . join( '/', @args ) : '' ); + return URI->new_abs( URI->new_abs( "$path$args", "$basepath$match" ), + $base )->canonical; } =item $c->error @@ -432,13 +434,20 @@ Add a new error. $c->error('Something bad happened'); +Clean errors. + + $c->error(0); + =cut sub error { my $c = shift; - my $error = ref $_[0] eq 'ARRAY' ? $_[0] : [@_]; - push @{ $c->{error} }, @$error; - return $c->{error}; + if ( $_[0] ) { + my $error = ref $_[0] eq 'ARRAY' ? $_[0] : [@_]; + push @{ $c->{error} }, @$error; + } + elsif ( defined $_[0] ) { $c->{error} = undef } + return $c->{error} || []; } =item $c->engine @@ -756,14 +765,15 @@ sub execute { } $c->{depth}++; eval { - if ( $c->debug ) { + if ( $c->debug ) + { my ( $elapsed, @state ) = $c->benchmark( $code, $class, $c, @{ $c->req->args } ); push @{ $c->{stats} }, [ $action, sprintf( '%fs', $elapsed ) ]; $c->state(@state); } else { - $c->state( &$code( $class, $c, @{ $c->req->args } ) || 0 ) + $c->state( &$code( $class, $c, @{ $c->req->args } ) || 0 ); } }; $c->{depth}--; diff --git a/t/optional/stress.t b/t/optional/stress.t index 10ee561..f1f6b45 100644 --- a/t/optional/stress.t +++ b/t/optional/stress.t @@ -10,13 +10,15 @@ use Test::More; use Catalyst::Test 'TestApp'; use YAML; -our ($iters, $tests); -BEGIN { - plan skip_all => 'set CAT_STRESS to enable this test' unless $ENV{CAT_STRESS}; - - $iters = $ENV{CAT_STRESS} || 10; - $tests = YAML::LoadFile( "$FindBin::Bin/stress.yml" ); - +our ( $iters, $tests ); + +BEGIN { + plan skip_all => 'set TEST_STRESS to enable this test' + unless $ENV{TEST_STRESS}; + + $iters = $ENV{TEST_STRESS} || 10; + $tests = YAML::LoadFile("$FindBin::Bin/stress.yml"); + my $total_tests = 0; map { $total_tests += scalar @{ $tests->{$_} } } keys %{$tests}; plan tests => $iters * $total_tests; @@ -29,7 +31,7 @@ for ( 1 .. $iters ) { sub run_tests { foreach my $test_group ( keys %{$tests} ) { foreach my $test ( @{ $tests->{$test_group} } ) { - ok( request( $test ), $test_group . ' - ' . $test ); + ok( request($test), $test_group . ' - ' . $test ); } } }