File Coverage

blib/lib/Plack/Client/Backend/psgi_local.pm
Criterion Covered Total %
statement 34 36 94.4
branch 3 6 50.0
condition n/a
subroutine 10 10 100.0
pod 3 3 100.0
total 50 55 90.9


line stmt bran cond sub pod time code
1             package Plack::Client::Backend::psgi_local;
2             BEGIN {
3 4     4   5834 $Plack::Client::Backend::psgi_local::VERSION = '0.06';
4             }
5 4     4   41 use strict;
  4         13  
  4         149  
6 4     4   25 use warnings;
  4         13  
  4         145  
7             # ABSTRACT: backend for handling local app requests
8              
9 4     4   28 use Carp;
  4         10  
  4         714  
10 4     4   4052 use Plack::Middleware::ContentLength;
  4         6661  
  4         253  
11              
12 4     4   32 use base 'Plack::Client::Backend';
  4         9  
  4         2133  
13              
14              
15              
16             sub new {
17 4     4 1 10 my $class = shift;
18 4         15 my %params = @_;
19 4         181 my $self = $class->SUPER::new(@_);
20              
21 4 50       57 croak 'apps must be a hashref'
22             if ref($params{apps}) ne 'HASH';
23              
24 4         316 $self->{apps} = $params{apps};
25              
26 4         41 return $self;
27             }
28              
29 38     38   195 sub _apps { shift->{apps} }
30              
31              
32             sub app_for {
33 38     38 1 77 my $self = shift;
34 38         543 my ($for) = @_;
35 38         141 return $self->_apps->{$for};
36             }
37              
38              
39             sub app_from_request {
40 38     38 1 86 my $self = shift;
41 38         79 my ($req) = @_;
42              
43 38         61 my $app_name;
44 38 50       215 if (my $uri = $req->env->{'plack.client.original_uri'}) {
45 38         549 $app_name = $uri->authority;
46             }
47             else {
48 0         0 $app_name = $req->uri->authority;
49 0         0 $app_name =~ s/(.*):.*/$1/; # in case a port was added at some point
50             }
51              
52 38         565 my $app = $self->app_for($app_name);
53 38 50       128 croak "Unknown app: $app_name" unless $app;
54 38         5365 return Plack::Middleware::ContentLength->wrap($app);
55             }
56              
57             1;
58              
59             __END__