X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?p=catagits%2FCatalyst-Runtime.git;a=blobdiff_plain;f=lib%2FCatalyst.pm;h=ceb238e1ca18b83ff520276993c3e1c9c6f89727;hp=738149bc0e88c34fd9d8f1c804b0bf16dfe6d546;hb=d91504e32dc14e87f6650b1835f1287cac40fe7e;hpb=b8b29bac1f1da028ccc894b1e0d2992e120eed9a diff --git a/lib/Catalyst.pm b/lib/Catalyst.pm index 738149b..ceb238e 100644 --- a/lib/Catalyst.pm +++ b/lib/Catalyst.pm @@ -129,7 +129,7 @@ __PACKAGE__->stats_class('Catalyst::Stats'); __PACKAGE__->_encode_check(Encode::FB_CROAK | Encode::LEAVE_SRC); # Remember to update this in Catalyst::Runtime as well! -our $VERSION = '5.90079_006'; +our $VERSION = '5.90089_001'; $VERSION = eval $VERSION if $VERSION =~ /_/; # numify for warning-free dev releases sub import { @@ -592,7 +592,7 @@ sub last_error { my ($err, @errs) = @{shift->error}; return $err } =head2 shift_errors shifts the most recently added error off the error stack and returns if. Returns -nothing if there are nomore errors. +nothing if there are no more errors. =cut @@ -1049,7 +1049,11 @@ Clears the encoding for the current context =head2 encoding -Sets or gets the application encoding. +Sets or gets the application encoding. Setting encoding takes either an +Encoding object or a string that we try to resolve via L. + +You would expect to get the encoding object back if you attempt to set it. If +there is a failure you will get undef returned and an error message in the log. =cut @@ -1060,7 +1064,7 @@ sub clear_encoding { if(blessed $c) { $c->encoding(undef); } else { - $c->debug->error("You can't clear encoding on the application"); + $c->log->error("You can't clear encoding on the application"); } } @@ -1069,6 +1073,13 @@ sub encoding { my $encoding; if ( scalar @_ ) { + + # Don't let one change this once we are too far into the response + if(blessed $c && $c->res->finalized_headers) { + Carp::croak("You may not change the encoding once the headers are finalized"); + return; + } + # Let it be set to undef if (my $wanted = shift) { $encoding = Encode::find_encoding($wanted) @@ -2105,7 +2116,7 @@ sub finalize_headers { =head2 $c->finalize_encoding Make sure your body is encoded properly IF you set an encoding. By -default the encoding is UTF-8 but you can disable it by explictly setting the +default the encoding is UTF-8 but you can disable it by explicitly setting the encoding configuration value to undef. We can only encode when the body is a scalar. Methods for encoding via the @@ -3038,7 +3049,7 @@ $ENV{SCRIPT_NAME}. Please B that if you do use C the middleware is now adding via C rather than this method. -If you are using Lighttp or IIS6 you may wish to apply these middlewares. In +If you are using Lighttpd or IIS6 you may wish to apply these middlewares. In general this is no longer a common case but we have this here for backward compatibility. @@ -3107,7 +3118,7 @@ with a generated server script (via L and C) we do not attempt to return a valid L application using any existing C<${myapp}.psgi> scripts in your $HOME directory. -B C was orginally created when the first PSGI +B C was originally created when the first PSGI port was done for v5.90000. These are middlewares that are added to achieve backward compatibility with older applications. If you start your application using one of the supplied server scripts (generated with L and @@ -3621,7 +3632,7 @@ sub default_data_handlers { return eval { local $/; $slurped = $fh->getline; - $parser->can("decode_json")->($slurped); + $parser->can("decode_json")->($slurped); # decode_json does utf8 decoding for us } || Catalyst::Exception->throw(sprintf "Error Parsing POST '%s', Error: %s", (defined($slurped) ? $slurped : 'undef') ,$@); }, }; @@ -4207,7 +4218,7 @@ manually as well such as to conform to the JSON specification. NOTE: We also examine the value of $c->response->content_encoding. If you set this (like for example 'gzip', and manually gzipping the body) -we assume that you have done all the neccessary encoding yourself, since +we assume that you have done all the necessary encoding yourself, since we cannot encode the gzipped contents. If you use a plugin like L you need to update to a modern version in order to have this function correctly with the new UTF8 encoding code, or you