summaryrefslogtreecommitdiff
path: root/lib/Net/HTTP
diff options
context:
space:
mode:
Diffstat (limited to 'lib/Net/HTTP')
-rw-r--r--lib/Net/HTTP/Spore/Role/Request.pm34
1 files changed, 26 insertions, 8 deletions
diff --git a/lib/Net/HTTP/Spore/Role/Request.pm b/lib/Net/HTTP/Spore/Role/Request.pm
index ddd52e6..d22a721 100644
--- a/lib/Net/HTTP/Spore/Role/Request.pm
+++ b/lib/Net/HTTP/Spore/Role/Request.pm
@@ -33,22 +33,40 @@ sub http_request {
}
}
- if (defined $response) {
- map { $_->($response) } reverse @middlewares;
- return $response;
+ return
+ $self->_execute_middlewares_on_response( $response, @middlewares )
+ if defined $response;
+
+ $response = $self->_request($request);
+
+ return $self->_execute_middlewares_on_response( $response, @middlewares );
+}
+
+sub _execute_middlewares_on_response {
+ my ($self, $response, @middlewares) = @_;
+
+ foreach my $mw ( reverse @middlewares ) {
+ my $res = $mw->($response);
+ $response = $res
+ if ( defined $res
+ && Scalar::Util::blessed($res)
+ && $res->isa('Net::HTTP::Spore::Response') );
}
+ $response;
+}
+
+sub _request {
+ my ($self, $request) = @_;
+
my $result = $self->request($request->finalize);
- $response = $request->new_response(
+ my $response = $request->new_response(
$result->code,
$result->headers,
$result->content,
);
-
- map { $_->($response) } reverse @middlewares;
-
- $response;
+ return $response;
}
1;