X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FCatalyst%2FEngine.pm;h=b751ba322561678c8c96a28b0be23dd1bfb6bf00;hb=069355dabccdbb5fd15a4c7cabd7ef3b96963182;hp=1f22735f53a5dd151bcad801102d34da026c9aab;hpb=7fa2c9c1b85c98786655ad5169708d8dc84e8353;p=catagits%2FCatalyst-Runtime.git
diff --git a/lib/Catalyst/Engine.pm b/lib/Catalyst/Engine.pm
index 1f22735..b751ba3 100644
--- a/lib/Catalyst/Engine.pm
+++ b/lib/Catalyst/Engine.pm
@@ -16,8 +16,9 @@ use Scalar::Util ();
has read_length => (is => 'rw');
has read_position => (is => 'rw');
-# Stringify to class
-use overload '""' => sub { return ref shift }, fallback => 1;
+has _prepared_write => (is => 'rw');
+
+no Moose;
# Amount of data to read from input on each pass
our $CHUNKSIZE = 64 * 1024;
@@ -70,7 +71,9 @@ sub finalize_cookies {
my @cookies;
my $response = $c->response;
- while( my($name, $val) = each %{ $response->cookies } ) {
+ foreach my $name (keys %{ $response->cookies }) {
+
+ my $val = $response->cookies->{$name};
my $cookie = (
Scalar::Util::blessed($val)
@@ -95,7 +98,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.
@@ -122,15 +125,12 @@ 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};
- # Don't show response header state in dump
- delete $c->res->{_finalized_headers};
-
my @infos;
my $i = 0;
for my $dump ( $c->dump_these ) {
@@ -158,6 +158,7 @@ EOF
(no) Vennligst prov igjen senere
(dk) Venligst prov igen senere
(pl) Prosze sprobowac pozniej
+(pt) Por favor volte mais tarde
$name = '';
@@ -243,7 +244,7 @@ EOF
}
/* from http://users.tkk.fi/~tkarvine/linux/doc/pre-wrap/pre-wrap-css3-mozilla-opera-ie.html */
/* Browser specific (not valid) styles to make preformatted text wrap */
- pre {
+ pre {
white-space: pre-wrap; /* css-3 */
white-space: -moz-pre-wrap; /* Mozilla, since 1999 */
white-space: -pre-wrap; /* Opera 4-6 */
@@ -293,7 +294,8 @@ sub finalize_uploads {
my ( $self, $c ) = @_;
my $request = $c->request;
- while( my($key,$upload) = each %{ $request->uploads } ) {
+ foreach my $key (keys %{ $request->uploads }) {
+ my $upload = $request->uploads->{$key};
unlink grep { -e $_ } map { $_->tempname }
(ref $upload eq 'ARRAY' ? @{$upload} : ($upload));
}
@@ -314,10 +316,10 @@ sub prepare_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}->tmpdir( $c->config->{uploadtmp} )
if exists $c->config->{uploadtmp};
}
-
+
while ( my $buffer = $self->read($c) ) {
$c->prepare_body_chunk($buffer);
}
@@ -350,15 +352,15 @@ sub prepare_body_chunk {
=head2 $self->prepare_body_parameters($c)
-Sets up parameters from body.
+Sets up parameters from body.
=cut
sub prepare_body_parameters {
my ( $self, $c ) = @_;
-
+
return unless $c->request->{_body};
-
+
$c->request->body_parameters( $c->request->{_body}->param );
}
@@ -404,12 +406,14 @@ sub prepare_parameters {
my $body_parameters = $request->body_parameters;
my $query_parameters = $request->query_parameters;
# We copy, no references
- while( my($name, $param) = each(%$query_parameters) ) {
+ foreach my $name (keys %$query_parameters) {
+ my $param = $query_parameters->{$name};
$parameters->{$name} = ref $param eq 'ARRAY' ? [ @$param ] : $param;
}
# Merge query and body parameters
- while( my($name, $param) = each(%$body_parameters) ) {
+ foreach my $name (keys %$body_parameters) {
+ my $param = $body_parameters->{$name};
my @values = ref $param eq 'ARRAY' ? @$param : ($param);
if ( my $existing = $parameters->{$name} ) {
unshift(@values, (ref $existing eq 'ARRAY' ? @$existing : $existing));
@@ -436,7 +440,7 @@ process the query string and extract query parameters.
sub prepare_query_parameters {
my ( $self, $c, $query_string ) = @_;
-
+
# Check for keywords (no = signs)
# (yes, index() is faster than a regex :))
if ( index( $query_string, '=' ) < 0 ) {
@@ -448,17 +452,17 @@ sub prepare_query_parameters {
# replace semi-colons
$query_string =~ s/;/&/g;
-
- my @params = split /&/, $query_string;
+
+ my @params = grep { length $_ } split /&/, $query_string;
for my $item ( @params ) {
-
- my ($param, $value)
+
+ my ($param, $value)
= map { $self->unescape_uri($_) }
split( /=/, $item, 2 );
-
+
$param = $self->unescape_uri($item) unless defined $param;
-
+
if ( exists $query{$param} ) {
if ( ref $query{$param} ) {
push @{ $query{$param} }, $value;
@@ -486,7 +490,7 @@ sub prepare_read {
# Initialize the read position
$self->read_position(0);
-
+
# Initialize the amount of data we think we need to read
$self->read_length( $c->request->header('Content-Length') || 0 );
}
@@ -511,7 +515,8 @@ sub prepare_uploads {
my $uploads = $request->{_body}->upload;
my $parameters = $request->parameters;
- while(my($name,$files) = each(%$uploads) ) {
+ foreach my $name (keys %$uploads) {
+ my $files = $uploads->{$name};
my @uploads;
for my $upload (ref $files eq 'ARRAY' ? @$files : ($files)) {
my $headers = HTTP::Headers->new( %{ $upload->{headers} } );
@@ -615,19 +620,21 @@ 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;
-
+
if ( !defined $wrote && $! == EWOULDBLOCK ) {
# Unable to write on the first try, will retry in the loop below
$wrote = 0;
}
-
+
if ( defined $wrote && $wrote < $len ) {
# We didn't write the whole buffer
while (1) {
@@ -639,11 +646,11 @@ sub write {
next if $! == EWOULDBLOCK;
return;
}
-
+
last if $wrote >= $len;
}
}
-
+
return $wrote;
}
@@ -668,9 +675,7 @@ sub unescape_uri {
=head1 AUTHORS
-Sebastian Riedel,
-
-Andy Grundman,
+Catalyst Contributors, see Catalyst.pm
=head1 COPYRIGHT