File Coverage

blib/lib/HTTP/Tiny/FromHTTPRequest.pm
Criterion Covered Total %
statement 37 37 100.0
branch 9 12 75.0
condition 5 6 83.3
subroutine 7 7 100.0
pod 1 1 100.0
total 59 63 93.6


line stmt bran cond sub pod time code
1             package HTTP::Tiny::FromHTTPRequest;
2              
3             # ABSTRACT: Perform a request based on a plain HTTP request or HTTP::Request object
4              
5 3     3   1412 use strict;
  3         23  
  3         83  
6 3     3   15 use warnings;
  3         8  
  3         85  
7              
8 3     3   1382 use parent 'HTTP::Tiny';
  3         951  
  3         18  
9              
10 3     3   159242 use Carp;
  3         7  
  3         172  
11 3     3   19 use Scalar::Util qw(blessed);
  3         7  
  3         279  
12 3     3   1510 use HTTP::Request;
  3         68117  
  3         855  
13              
14             our $VERSION = '0.01';
15              
16             sub request {
17 7     7 1 26292 my ($self, @params) = @_;
18              
19 7         26 local $Carp::Internal{ 'HTTP::Tiny::FromHTTPRequest' } = 1;
20              
21 7 50       28 (@_ >= 2 )
22             or Carp::croak(q/Usage: $http->request(METHOD, URL, [HASHREF])/ . "\n");
23              
24 7         28 my @methods = qw(get head put post delete);
25 7 100 100     33 if ( !ref $params[0] && grep{ lc $params[0] eq $_ }@methods ) {
  20         81  
26 2         18 return $self->SUPER::request( @params );
27             }
28              
29 5         9 my $request;
30 5 100 66     73 if ( blessed $params[0] and $params[0]->isa('HTTP::Request') ) {
    50          
31 3         9 $request = $params[0];
32             }
33             elsif ( ! ref $params[0] ) {
34 2         41 $request = HTTP::Request->parse( $params[0] );
35             }
36              
37 5 50       702 Carp::croak(q/Usage: $http->request(METHOD, URL, [HASHREF])/ . "\n") if !$request;
38              
39 5         11 my %options;
40              
41             # add headers
42 5         26 $options{headers} = { $request->headers->flatten };
43 5         906 delete $options{headers}->{Host};
44              
45 5         26 my $content = $request->content;
46 5 100       79 if ( $content ) {
47 4         10 $options{content} = $content;
48             }
49              
50 5         16 return $self->SUPER::request(
51             $request->method,
52             $request->uri,
53             \%options,
54             );
55             };
56              
57             1;
58              
59             __END__