From: John Napiorkowski Date: Wed, 22 Jul 2015 18:31:07 +0000 (-0500) Subject: fixed bug with last_error X-Git-Tag: 5.90094~4^2~2 X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?p=catagits%2FCatalyst-Runtime.git;a=commitdiff_plain;h=e5ac67e5d706bf2e4a4c33537479f70c409a6e4e fixed bug with last_error --- diff --git a/Changes b/Changes index 421ff29..01d6a36 100644 --- a/Changes +++ b/Changes @@ -6,7 +6,8 @@ - https://github.com/perl-catalyst/catalyst-runtime/pull/96 - https://github.com/perl-catalyst/catalyst-runtime/pull/97 - https://github.com/perl-catalyst/catalyst-runtime/pull/98 - + - Fixed issue where last_error actually returned the first error. Took + the change to add a 'pop_errors' to give the inverse of shift_errors. 5.90093 - 2015-05-29 - Fixed a bug where if you used $res->write and then $res->body, the diff --git a/lib/Catalyst.pm b/lib/Catalyst.pm index b79df55..d08e7ba 100644 --- a/lib/Catalyst.pm +++ b/lib/Catalyst.pm @@ -640,22 +640,42 @@ sub has_errors { scalar(@{shift->error}) ? 1:0 } =head2 $c->last_error Returns the most recent error in the stack (the one most recently added...) -or nothing if there are no errors. +or nothing if there are no errors. This does not modify the contents of the +error stack. =cut -sub last_error { my ($err, @errs) = @{shift->error}; return $err } +sub last_error { + my (@errs) = @{shift->error}; + return scalar(@errs) ? $errs[-1]: undef; +} =head2 shift_errors -shifts the most recently added error off the error stack and returns if. Returns +shifts the most recently added error off the error stack and returns it. Returns nothing if there are no more errors. =cut sub shift_errors { my ($self) = @_; - my ($err, @errors) = @{$self->error}; + my @errors = @{$self->error}; + my $err = shift(@errors); + $self->{error} = \@errors; + return $err; +} + +=head2 pop_errors + +pops the most recently added error off the error stack and returns it. Returns +nothing if there are no more errors. + +=cut + +sub pop_errors { + my ($self) = @_; + my @errors = @{$self->error}; + my $err = pop(@errors); $self->{error} = \@errors; return $err; } diff --git a/lib/Catalyst/Response.pm b/lib/Catalyst/Response.pm index fa15afb..e87ba61 100644 --- a/lib/Catalyst/Response.pm +++ b/lib/Catalyst/Response.pm @@ -482,6 +482,12 @@ http 1.1 webservers support this). If there is an encoding set, we encode each line of the response (the default encoding is UTF-8). +=head2 $res->unencoded_write( $data ) + +Works just like ->write but we don't apply any content encoding to C<$data>. Use +this if you are already encoding the $data or the data is arriving from an encoded +storage. + =head2 $res->write_fh Returns an instance of L, which is a lightweight diff --git a/lib/Catalyst/Upgrading.pod b/lib/Catalyst/Upgrading.pod index 0d1a60b..094191d 100644 --- a/lib/Catalyst/Upgrading.pod +++ b/lib/Catalyst/Upgrading.pod @@ -2,6 +2,16 @@ Catalyst::Upgrading - Instructions for upgrading to the latest Catalyst +=head1 Upgrading to Catalyst 5.90100 + +The method C in L was actually returning the first error. This has +been fixed but there is a small chance it could be a breaking issue for you. If this gives +you trouble changing to C is the easiest workaround (although that does +modify the error stack so if you are relying on that not being changed you should try something +like @{$c->errors}[-1] instead. Since this method is relatively new and the cases when the +error stack actually has more than one error in it, we feel the exposure is very low, but bug +reports are very welcomed. + =head1 Upgrading to Catalyst 5.90090 L has a new method 'inject_component' which works the same as the method of