File Coverage

blib/lib/Plack/Middleware/Curlizer.pm
Criterion Covered Total %
statement 38 41 92.6
branch 6 8 75.0
condition 1 3 33.3
subroutine 9 10 90.0
pod 2 2 100.0
total 56 64 87.5


line stmt bran cond sub pod time code
1             package Plack::Middleware::Curlizer;
2 2     2   77203 use strict;
  2         3  
  2         47  
3 2     2   6 use warnings;
  2         2  
  2         45  
4              
5 2     2   810 use ShellQuote::Any;
  2         689  
  2         8  
6 2     2   961 use Plack::Request;
  2         85667  
  2         72  
7 2     2   16 use parent 'Plack::Middleware';
  2         4  
  2         15  
8 2         11 use Plack::Util::Accessor qw/
9             callback
10 2     2   4409 /;
  2         3  
11              
12             our $VERSION = '0.02';
13              
14             sub prepare_app {
15 1     1 1 508 my ($self) = @_;
16              
17 1 50       4 unless ($self->callback) {
18             $self->callback(sub{
19 0     0   0 my ($curl) = @_;
20 0         0 print "$curl\n";
21 0         0 });
22             }
23             }
24              
25             sub call {
26 2     2 1 13431 my($self, $env) = @_;
27              
28 2         12 my $req = Plack::Request->new($env);
29              
30 2         15 my $curl = $self->_build_curl_cmd($req);
31              
32 2 50 33     1304 if ($self->callback && ref($self->callback) eq 'CODE') {
33 2         26 $self->callback->($curl, $req, $env);
34             }
35              
36 2         22 my $res = $self->app->($env);
37             }
38              
39             sub _build_curl_cmd {
40 2     2   2 my ($self, $req) = @_;
41              
42 2         7 my @cmd = ('curl', $req->uri);
43              
44 2 100       404 unless ($req->method eq 'GET') {
45 1         9 push @cmd, '-X', $req->method;
46             }
47              
48 2         15 my $http_header_str = $req->headers->as_string;
49 2         262 my @headers = split "\n", $http_header_str;
50              
51 2         4 for my $h (@headers) {
52 5         15 my ($k, $v) = split /:\s+/, $h;
53 5         12 push @cmd, '-H', qq|$k: $v|;
54             }
55              
56 2 100       5 if ($req->method eq 'POST') {
57 1         9 push @cmd, '--data', $req->content;
58             }
59              
60 2         555 return shell_quote \@cmd;
61             }
62              
63             1;
64              
65             __END__