X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FCatalyst%2FEngine.pm;h=2ca6a39bfb726ea2a77559a7f829eb1c30a251f2;hb=4a6f54df4b399dabd4f34d3e92340a67ca7894ac;hp=c0cdf1ebae34932efe1b944abb2ae36abf49f631;hpb=2f3812528068bc1d9f7840067f0c03d36cd47e6d;p=catagits%2FCatalyst-Runtime.git diff --git a/lib/Catalyst/Engine.pm b/lib/Catalyst/Engine.pm index c0cdf1e..2ca6a39 100644 --- a/lib/Catalyst/Engine.pm +++ b/lib/Catalyst/Engine.pm @@ -10,13 +10,16 @@ use HTML::Entities; use HTTP::Body; use HTTP::Headers; use URI::QueryParam; -use Scalar::Util (); + +use namespace::clean -except => 'meta'; + +has env => (is => 'rw'); # input position and length has read_length => (is => 'rw'); has read_position => (is => 'rw'); -no Moose; +has _prepared_write => (is => 'rw'); # Amount of data to read from input on each pass our $CHUNKSIZE = 64 * 1024; @@ -44,7 +47,7 @@ sub finalize_body { my ( $self, $c ) = @_; my $body = $c->response->body; no warnings 'uninitialized'; - if ( Scalar::Util::blessed($body) && $body->can('read') or ref($body) eq 'GLOB' ) { + if ( blessed($body) && $body->can('read') or ref($body) eq 'GLOB' ) { while ( !eof $body ) { read $body, my ($buffer), $CHUNKSIZE; last unless $self->write( $c, $buffer ); @@ -74,7 +77,7 @@ sub finalize_cookies { my $val = $response->cookies->{$name}; my $cookie = ( - Scalar::Util::blessed($val) + blessed($val) ? $val : CGI::Simple::Cookie->new( -name => $name, @@ -96,7 +99,7 @@ sub finalize_cookies { =head2 $self->finalize_error($c) -Output an apropriate error message, called if there's an error in $c +Output an appropriate error message. Called if there's an error in $c after the dispatch has finished. Will output debug messages if Catalyst is in debug mode, or a `please come back later` message otherwise. @@ -123,11 +126,11 @@ sub finalize_error { $name = "

$name

"; # Don't show context in the dump - delete $c->req->{_context}; - delete $c->res->{_context}; + $c->req->_clear_context; + $c->res->_clear_context; # Don't show body parser in the dump - delete $c->req->{_body}; + $c->req->_clear_body; my @infos; my $i = 0; @@ -157,6 +160,8 @@ EOF (dk) Venligst prov igen senere (pl) Prosze sprobowac pozniej (pt) Por favor volte mais tarde +(ru) Попробуйте еще раз позже +(ua) Спробуйте ще раз пізніше $name = ''; @@ -311,10 +316,10 @@ sub prepare_body { if ( my $length = $self->read_length ) { my $request = $c->request; - unless ( $request->{_body} ) { + unless ( $request->_body ) { my $type = $request->header('Content-Type'); - $request->{_body} = HTTP::Body->new( $type, $length ); - $request->{_body}->tmpdir( $c->config->{uploadtmp} ) + $request->_body(HTTP::Body->new( $type, $length )); + $request->_body->tmpdir( $c->config->{uploadtmp} ) if exists $c->config->{uploadtmp}; } @@ -332,7 +337,7 @@ sub prepare_body { } else { # Defined but will cause all body code to be skipped - $c->request->{_body} = 0; + $c->request->_body(0); } } @@ -345,7 +350,7 @@ Add a chunk to the request body. sub prepare_body_chunk { my ( $self, $c, $chunk ) = @_; - $c->request->{_body}->add($chunk); + $c->request->_body->add($chunk); } =head2 $self->prepare_body_parameters($c) @@ -357,9 +362,9 @@ Sets up parameters from body. sub prepare_body_parameters { my ( $self, $c ) = @_; - return unless $c->request->{_body}; + return unless $c->request->_body; - $c->request->body_parameters( $c->request->{_body}->param ); + $c->request->body_parameters( $c->request->_body->param ); } =head2 $self->prepare_connection($c) @@ -509,9 +514,9 @@ sub prepare_uploads { my ( $self, $c ) = @_; my $request = $c->request; - return unless $request->{_body}; + return unless $request->_body; - my $uploads = $request->{_body}->upload; + my $uploads = $request->_body->upload; my $parameters = $request->parameters; foreach my $name (keys %$uploads) { my $files = $uploads->{$name}; @@ -585,7 +590,7 @@ sub read { =head2 $self->read_chunk($c, $buffer, $length) -Each engine inplements read_chunk as its preferred way of reading a chunk +Each engine implements read_chunk as its preferred way of reading a chunk of data. =cut @@ -618,11 +623,13 @@ Writes the buffer to the client. sub write { my ( $self, $c, $buffer ) = @_; - unless ( $self->{_prepared_write} ) { + unless ( $self->_prepared_write ) { $self->prepare_write($c); - $self->{_prepared_write} = 1; + $self->_prepared_write(1); } + return 0 if !defined $buffer; + my $len = length($buffer); my $wrote = syswrite STDOUT, $buffer; @@ -669,6 +676,18 @@ sub unescape_uri { , see finalize_body +=head2 $self->env + +Hash containing enviroment variables including many special variables inserted +by WWW server - like SERVER_*, REMOTE_*, HTTP_* ... + +Before accesing enviroment variables consider whether the same information is +not directly available via Catalyst objects $c->request, $c->engine ... + +BEWARE: If you really need to access some enviroment variable from your Catalyst +application you should use $c->engine->env->{VARNAME} instead of $ENV{VARNAME}, +as in some enviroments the %ENV hash does not contain what you would expect. + =head1 AUTHORS Catalyst Contributors, see Catalyst.pm