use HTML::Entities;
use HTTP::Body;
use HTTP::Headers;
+use URI::QueryParam;
# input position and length
__PACKAGE__->mk_accessors(qw/read_position read_length/);
sub finalize_body {
my ( $self, $c ) = @_;
-
- $self->write( $c, $c->response->output );
+ if ( ref $c->response->body && $c->response->body->can('read') ) {
+ while ( !$c->response->body->eof() ) {
+ $c->response->body->read( my $buffer, $CHUNKSIZE );
+ $self->write( $c, $buffer );
+ }
+ $c->response->body->close();
+ }
+ else {
+ $self->write( $c, $c->response->body );
+ }
}
=item $self->finalize_cookies($c)
my $req = encode_entities Dumper $c->req;
my $res = encode_entities Dumper $c->res;
my $stash = encode_entities Dumper $c->stash;
- $infos = <<"";
-<br/>
-<b><u>Request</u></b><br/>
-<pre>$req</pre>
-<b><u>Response</u></b><br/>
-<pre>$res</pre>
-<b><u>Stash</u></b><br/>
-<pre>$stash</pre>
+ my @infos;
+ my $i = 0;
+ for my $dump ( $c->dump_these ) {
+ my $name = $dump->[0];
+ my $value = encode_entities( Dumper $dump->[1] );
+ push @infos, sprintf <<"EOF", $name, $value;
+<div>
+ <b><u>
+ <a href="#" onclick="toggleDump(dump_$i); return false">%s</a>
+ </u></b>
+</div>
+<br/>
+<div id="dump_$i">
+ <pre>%s</pre>
+</div>
+EOF
+ $i++;
+ }
+ $infos = join "\n", @infos;
}
else {
$title = $name;
<html>
<head>
<title>$title</title>
+ <script language="JavaScript">
+ <!--
+ function toggleDump (dumpElement) {
+ if (dumpElement.style.display == "none") {
+ dumpElement.style.display = "";
+ }
+ else {
+ dumpElement.style.display = "none";
+ }
+ }
+ -->
+ </script>
<style type="text/css">
body {
font-family: "Bitstream Vera Sans", "Trebuchet MS", Verdana,
margin: 0px;
padding: 0px;
}
+ :link, :link:hover, :visited, :visited:hover {
+ color: #ddd;
+ }
div.box {
background-color: #ccc;
border: 1px solid #aaa;
=cut
-sub prepare_query_parameters { }
+sub prepare_query_parameters {
+ my ( $self, $c, $query_string ) = @_;
+
+ # replace semi-colons
+ $query_string =~ s/;/&/g;
+
+ my $u = URI->new( '', 'http' );
+ $u->query($query_string);
+ for my $key ( $u->query_param ) {
+ my @vals = $u->query_param($key);
+ $c->request->query_parameters->{$key} = @vals > 1 ? [@vals] : $vals[0];
+ }
+}
=item $self->prepare_read($c)
push @uploads, $u;
}
$c->request->uploads->{$name} = @uploads > 1 ? \@uploads : $uploads[0];
+
+ # support access to the filename as a normal param
+ my @filenames = map { $_->{filename} } @uploads;
+ $c->request->parameters->{$name} =
+ @filenames > 1 ? \@filenames : $filenames[0];
}
}