summaryrefslogtreecommitdiff
path: root/lib/Net/HTTP/Spore/Response.pm
diff options
context:
space:
mode:
Diffstat (limited to 'lib/Net/HTTP/Spore/Response.pm')
-rw-r--r--lib/Net/HTTP/Spore/Response.pm144
1 files changed, 136 insertions, 8 deletions
diff --git a/lib/Net/HTTP/Spore/Response.pm b/lib/Net/HTTP/Spore/Response.pm
index d695dfa..4667e08 100644
--- a/lib/Net/HTTP/Spore/Response.pm
+++ b/lib/Net/HTTP/Spore/Response.pm
@@ -1,5 +1,7 @@
package Net::HTTP::Spore::Response;
+# ABSTRACT: Portable HTTP Response object for SPORE response
+
use strict;
use warnings;
@@ -11,20 +13,19 @@ sub new {
my ( $class, $rc, $headers, $body ) = @_;
my $self = bless {}, $class;
+
$self->status($rc) if defined $rc;
- if (defined $body) {
- $self->body($body);
- $self->raw_body($body);
- }
- $self->headers($headers || []);
+ $self->body($body) if defined $body;
+ $self->headers( $headers || [] );
$self;
}
-sub code { shift->status(@_) }
-sub content { shift->body(@_) }
-
+sub code { shift->status(@_) }
+sub content { shift->body(@_) }
+sub env { shift->request->env }
sub content_type { shift->headers->content_type(@_) }
sub content_length { shift->headers->content_length(@_) }
+sub location { shift->header->header( 'Location' => @_ ) }
sub status {
my $self = shift;
@@ -40,6 +41,9 @@ sub body {
my $self = shift;
if (@_) {
$self->{body} = shift;
+ if ( !defined $self->{raw_body} ) {
+ $self->{raw_body} = $self->{body};
+ }
}
else {
return $self->{body};
@@ -101,3 +105,127 @@ sub finalize {
}
1;
+__END__
+
+=head1 SYNOPSIS
+
+ use Net:HTTP::Spore::Response;
+
+ my $response = Net::HTTP::Spore::Response->new(
+ 200, ['Content-Type', 'application/json'], '{"foo":1}';
+ );
+ $response->request($request);
+
+=head1 DESCRIPTION
+
+Net::HTTP::Spore::Response create a HTTP response
+
+=head1 METHODS
+
+=over 4
+
+=item new
+
+ my $res = Net::HTTP::Spore::Response->new;
+ my $res = Net::HTTP::Spore::Response->new($status);
+ my $res = Net::HTTP::Spore::Response->new($status, $headers);
+ my $res = Net::HTTP::Spore::Response->new($status, $headers, $body);
+
+Creates a new Net::HTTP::Spore::Response object.
+
+=item code
+
+=item status
+
+ $res->status(200);
+ my $status = $res->status;
+
+Gets or sets the HTTP status of the response
+
+=item env
+
+ $res->env($env);
+ my $env = $res->env;
+
+Gets or sets the environment for the response. Shortcut to C<< $res->request->env >>
+
+=item content
+
+=item body
+
+ $res->body($body);
+ my $body = $res->body;
+
+Gets or sets the body for the response
+
+=item raw_body
+
+ my $raw_body = $res->raw_body
+
+The raw_body value is the same as body when the body is sets for the first time.
+
+=item content_type
+
+ $res->content_type('application/json');
+ my $ct = $res->content_type;
+
+Gets or sets the content type of the response body
+
+=item content_length
+
+ $res->content_length(length($body));
+ my $cl = $res->content_length;
+
+Gets or sets the content type of the response body
+
+=item location
+
+ $res->location('http://example.com');
+ my $location = $res->location;
+
+Gets or sets the location header for the response
+
+=item request
+
+ $res->request($request);
+ $request = $res->request;
+
+Gets or sets the HTTP request that created the current HTTP response.
+
+=item headers
+
+ $headers = $res->headers;
+ $res->headers(['Content-Type' => 'application/json']);
+
+Gets or sets HTTP response headers.
+
+=item header
+
+ my $cl = $res->header('Content-Length');
+ $res->header('Content-Type' => 'application/json');
+
+Shortcut for C<< $res->headers->header >>.
+
+=item finalise
+
+ my $res = Net::HTTP::Response->new($status, $headers, $body);
+ say "http status is ".$res->[0];
+
+Return an arrayref:
+
+=over 2
+
+=item status
+
+The first element of the array ref is the HTTP status
+
+=item headers
+
+The second element is an arrayref containing the list of HTTP headers
+
+=item body
+
+The third and final element is the body
+
+=back
+