File Coverage

blib/lib/Plack/Middleware/PathToQuery.pm
Criterion Covered Total %
statement 31 31 100.0
branch 9 14 64.2
condition 1 3 33.3
subroutine 5 5 100.0
pod 1 1 100.0
total 47 54 87.0


line stmt bran cond sub pod time code
1             package Plack::Middleware::PathToQuery;
2              
3 1     1   1832981 use strict;
  1         3  
  1         37  
4 1     1   7 use warnings;
  1         2  
  1         51  
5              
6             # ABSTRACT: Prepend converted PATH_INFO to QUERY_STRING
7             our $VERSION = 'v0.0.1'; # VERSION
8              
9 1     1   5 use parent qw(Plack::Middleware);
  1         1  
  1         9  
10              
11 1     1   7875 use URI::Escape;
  1         3  
  1         486  
12              
13             sub call
14             {
15 10     10 1 1748853 my ($self, $env) = @_;
16              
17 10   33     136 my $DEBUG = exists $self->{debug} && $self->{debug};
18              
19 10 50       28 $DEBUG and $env->{'psgi.errors'}->print('PATH_INFO: '.$env->{PATH_INFO}."\n");
20 10 50       68 $DEBUG and $env->{'psgi.errors'}->print('QUERY_STRING: '.$env->{QUERY_STRING}."\n");
21              
22 10         14 my @pairs;
23 10 50       29 if($env->{PATH_INFO} ne '') {
24 10         18 my $path = $env->{PATH_INFO};
25 10         42 $path =~ s@^/@@;
26 10         48 my @components = split '/', $path;
27 10         21 for my $component (@components) {
28 17 100       247 if($component =~ s/^([^-]+)-//) {
29 8         30 push @pairs, uri_escape($1).'='.uri_escape($component);
30             } else {
31 9         31 push @pairs, uri_escape($component).'=';
32             }
33             }
34 10 100       179 push @pairs, $env->{QUERY_STRING} if $env->{QUERY_STRING} ne '';
35 10         26 $env->{QUERY_STRING} = join '&', @pairs;
36 10         22 $env->{PATH_INFO} = '';
37             }
38              
39 10 50       23 $DEBUG and $env->{'psgi.errors'}->print('PATH_INFO: '.$env->{PATH_INFO}."\n");
40 10 50       18 $DEBUG and $env->{'psgi.errors'}->print('QUERY_STRING: '.$env->{QUERY_STRING}."\n");
41              
42 10         43 return $self->app->($env);
43             }
44              
45             1;
46              
47             __END__