summaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
authorJesse Luehrs <doy@tozt.net>2012-09-29 00:38:18 -0500
committerJesse Luehrs <doy@tozt.net>2012-09-29 00:44:20 -0500
commit6880cf8bc3618b56b871875150d40945e87ea4e2 (patch)
treee1411916c28e80fcb73c595f815385595a3839eb /lib
parent97fa8400999bfa3c9ab17ee1647eff1b9b893324 (diff)
downloadweb-request-6880cf8bc3618b56b871875150d40945e87ea4e2.tar.gz
web-request-6880cf8bc3618b56b871875150d40945e87ea4e2.zip
support setting cookies in streaming responses
Diffstat (limited to 'lib')
-rw-r--r--lib/Web/Response.pm19
1 files changed, 13 insertions, 6 deletions
diff --git a/lib/Web/Response.pm b/lib/Web/Response.pm
index 65fc372..0526815 100644
--- a/lib/Web/Response.pm
+++ b/lib/Web/Response.pm
@@ -70,10 +70,14 @@ has streaming_response => (
);
has cookies => (
+ traits => ['Hash'],
is => 'rw',
isa => 'HashRef[Str|HashRef[Str]]',
lazy => 1,
default => sub { +{} },
+ handles => {
+ has_cookies => 'count',
+ },
);
has _encoding_obj => (
@@ -123,8 +127,6 @@ sub finalize {
return $self->_finalize_streaming
if $self->has_streaming_response;
- $self->_finalize_cookies;
-
my $res = [
$self->status,
[
@@ -143,6 +145,8 @@ sub finalize {
$self->content
];
+ $self->_finalize_cookies($res);
+
return $res unless $self->has_encoding;
return Plack::Util::response_cb($res, sub {
@@ -159,11 +163,13 @@ sub _finalize_streaming {
my $streaming = $self->streaming_response;
- # XXX cookies?
-
- return $streaming unless $self->has_encoding;
+ return $streaming
+ unless $self->has_encoding || $self->has_cookies;
return Plack::Util::response_cb($streaming, sub {
+ my $res = shift;
+ $self->_finalize_cookies($res);
+ return unless $self->has_encoding;
return sub {
my $chunk = shift;
return unless defined $chunk;
@@ -181,10 +187,11 @@ sub _encode {
sub _finalize_cookies {
my $self = shift;
+ my ($res) = @_;
my $cookies = $self->cookies;
for my $name (keys %$cookies) {
- $self->headers->push_header(
+ push @{ $res->[1] }, (
'Set-Cookie' => $self->_bake_cookie($name, $cookies->{$name}),
);
}