File Coverage

blib/lib/Plack/Middleware/Proxy/AddVia.pm
Criterion Covered Total %
statement 9 27 33.3
branch 0 4 0.0
condition 0 3 0.0
subroutine 3 7 42.8
pod 1 3 33.3
total 13 44 29.5


line stmt bran cond sub pod time code
1             package Plack::Middleware::Proxy::AddVia;
2 1     1   686 use strict;
  1         1  
  1         37  
3 1     1   14 use parent 'Plack::Middleware';
  1         2  
  1         9  
4              
5 1     1   1221 use Plack::Util;
  1         3  
  1         390  
6              
7             our $VERSION = '0.01';
8              
9             sub add_via {
10 0     0 0   my ( $self, $via, $protocol, $recieved_by ) = @_;
11              
12 0           $protocol =~ s|^HTTP/||;
13 0   0       return join ', ', $via || (), "$protocol $recieved_by";
14             }
15              
16             sub make_recieved_by_from_env {
17 0     0 0   my ( $self, $env ) = @_;
18 0 0         my $host = $env->{SERVER_NAME} . (
19             $env->{SERVER_PORT} == 80 ? '' : ":$env->{SERVER_PORT}"
20             ) ;
21 0           return $host . " (" . __PACKAGE__ . "/$VERSION)";
22             }
23              
24             sub call {
25 0     0 1   my($self, $env) = @_;
26              
27 0           my $recieved_by = $self->make_recieved_by_from_env( $env );
28              
29 0           $env->{HTTP_VIA} = $self->add_via(
30             $env->{HTTP_VIA}, $env->{SERVER_PROTOCOL}, $recieved_by
31             );
32              
33             return sub {
34 0     0     my $orig_respond = shift;
35              
36             my $respond = sub {
37 0           my $res = shift;
38 0           my $via = Plack::Util::header_get($res->[1], 'Via');
39 0           Plack::Util::header_set(
40             $res->[1], 'Via' => $self->add_via(
41             $via, $env->{'plack.proxy.last_protocol'}, $recieved_by
42             )
43             );
44 0           return $orig_respond->( $res );
45 0           };
46              
47 0           my $res = $self->app->($env);
48 0 0         ref $res eq 'CODE' ? $res->( $respond ) : $respond->( $res );
49 0           };
50             }
51              
52             1;
53              
54             __END__