summary refs log tree commit diff
path: root/lib/Net/HTTP/Spore/Role/Request.pm
diff options
context:
space:
mode:
Diffstat (limited to 'lib/Net/HTTP/Spore/Role/Request.pm')
-rw-r--r--lib/Net/HTTP/Spore/Role/Request.pm38
1 files changed, 26 insertions, 12 deletions
diff --git a/lib/Net/HTTP/Spore/Role/Request.pm b/lib/Net/HTTP/Spore/Role/Request.pm
index 7fbb290..a0d61b1 100644
--- a/lib/Net/HTTP/Spore/Role/Request.pm
+++ b/lib/Net/HTTP/Spore/Role/Request.pm
@@ -33,27 +33,41 @@ 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') );
     }
 
-    my $final = $request->finalize;
-    $self->_trace_msg("<- ".$request->method. " => ".$request->uri);
+    $response;
+}
+
+sub _request {
+    my ($self, $request) = @_;
 
-    my $result = $self->request($final);
+    my $result = $self->request($request->finalize);
 
-    $response = $request->new_response(
+    my $response = $request->new_response(
         $result->code,
         $result->headers,
         $result->content,
     );
 
-    $self->_trace_msg("<- HTTP Status".$result->code );
-    
-    map { $_->($response) } reverse @middlewares;
-
-    $response;
+    return $response;
 }
 
 1;