summaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
authorJesse Luehrs <doy@tozt.net>2012-07-18 16:20:27 -0500
committerJesse Luehrs <doy@tozt.net>2012-07-18 16:20:27 -0500
commitfd116f68e645ddaf7cc63a37b57e7b1c09ff46c8 (patch)
tree4abcadb4646c0bbde2b0f8769132a346cb161261 /lib
parent292726f51ea3d8e83c197c5de36ccbdec9a5ca86 (diff)
downloadweb-request-fd116f68e645ddaf7cc63a37b57e7b1c09ff46c8.tar.gz
web-request-fd116f68e645ddaf7cc63a37b57e7b1c09ff46c8.zip
few minor bug fixes
Diffstat (limited to 'lib')
-rw-r--r--lib/Web/Request.pm21
-rw-r--r--lib/Web/Request/Upload.pm5
-rw-r--r--lib/Web/Response.pm2
3 files changed, 23 insertions, 5 deletions
diff --git a/lib/Web/Request.pm b/lib/Web/Request.pm
index 66c9f80..fd7e6fc 100644
--- a/lib/Web/Request.pm
+++ b/lib/Web/Request.pm
@@ -1,6 +1,7 @@
package Web::Request;
use Moose;
+use Class::Load ();
use Encode ();
use HTTP::Body ();
use HTTP::Headers ();
@@ -138,6 +139,11 @@ has cookies => (
},
);
+has _http_body => (
+ is => 'rw',
+ isa => 'HTTP::Body',
+);
+
has _parsed_body => (
traits => ['Hash'],
is => 'ro',
@@ -157,7 +163,9 @@ has _parsed_body => (
}
my $body = HTTP::Body->new($ct, $cl);
+ # automatically clean up, but wait until the request object is gone
$body->cleanup(1);
+ $self->_http_body($body);
my $input = $self->_input;
@@ -221,7 +229,10 @@ has query_parameters => (
default => sub {
my $self = shift;
- my %params = $self->uri->query_form;
+ my %params = (
+ $self->uri->query_form,
+ (map { $_ => '' } $self->uri->query_keywords),
+ );
return {
map { $_ => $self->decode($params{$_}) } keys %params
};
@@ -298,7 +309,7 @@ has uploads => (
my $ret = {};
for my $key (keys %$uploads) {
my $val = $uploads->{$key};
- $ret->{$key} = ref($val)
+ $ret->{$key} = ref($val) eq 'ARRAY'
? $self->new_upload($val->[-1])
: $self->new_upload($val);
}
@@ -319,7 +330,7 @@ has all_uploads => (
my $ret = {};
for my $key (keys %$uploads) {
my $val = $uploads->{$key};
- $ret->{$key} = ref($val)
+ $ret->{$key} = ref($val) eq 'ARRAY'
? [ map { $self->new_upload($_) } @$val ]
: [ $self->new_upload($val) ];
}
@@ -336,7 +347,7 @@ has encoding => (
has _encoding_obj => (
is => 'ro',
- isa => 'Encode::Encoding',
+ isa => 'Object', # no idea what this should be
lazy => 1,
default => sub { Encode::find_encoding(shift->encoding) },
handles => ['decode', 'encode'],
@@ -362,12 +373,14 @@ sub upload_class { 'Web::Request::Upload' }
sub new_response {
my $self = shift;
+ Class::Load::load_class($self->response_class);
$self->response_class->new(@_);
}
sub new_upload {
my $self = shift;
+ Class::Load::load_class($self->upload_class);
$self->upload_class->new(@_);
}
diff --git a/lib/Web/Request/Upload.pm b/lib/Web/Request/Upload.pm
index a3d8d77..5e7bf87 100644
--- a/lib/Web/Request/Upload.pm
+++ b/lib/Web/Request/Upload.pm
@@ -3,9 +3,12 @@ use Moose;
use HTTP::Headers;
+use Web::Response::Types;
+
has headers => (
is => 'ro',
- isa => 'HTTP::Headers',
+ isa => 'Web::Response::Types::HTTP::Headers',
+ coerce => 1,
handles => ['content_type'],
);
diff --git a/lib/Web/Response.pm b/lib/Web/Response.pm
index 8f2f24a..3715538 100644
--- a/lib/Web/Response.pm
+++ b/lib/Web/Response.pm
@@ -108,6 +108,8 @@ sub _bake_cookie {
if defined($val->{path});
push @cookie, 'expires=' . $self->_date($val->{expires})
if defined($val->{expires});
+ push @cookie, 'max-age=' . $val->{'max-age'}
+ if defined($val->{'max-age'});
push @cookie, 'secure'
if $val->{secure};
push @cookie, 'HttpOnly'