File Coverage

blib/lib/Web/Machine/Util.pm
Criterion Covered Total %
statement 49 49 100.0
branch 19 20 95.0
condition n/a
subroutine 15 15 100.0
pod 5 7 71.4
total 88 91 96.7


line stmt bran cond sub pod time code
1             package Web::Machine::Util;
2             BEGIN {
3 19     19   305515 $Web::Machine::Util::AUTHORITY = 'cpan:STEVAN';
4             }
5             # ABSTRACT: General Utility module
6             $Web::Machine::Util::VERSION = '0.15';
7 19     19   170 use strict;
  19         39  
  19         573  
8 19     19   94 use warnings;
  19         37  
  19         638  
9              
10 19     19   95 use Carp qw[ confess ];
  19         43  
  19         1103  
11 19     19   100 use Scalar::Util qw[ blessed ];
  19         55  
  19         1373  
12 19     19   114 use List::Util qw[ first ];
  19         35  
  19         2471  
13              
14 19     19   20958 use HTTP::Headers::ActionPack 0.07;
  19         63782  
  19         828  
15              
16 19         287 use Sub::Exporter -setup => {
17             exports => [qw[
18             first
19             pair_key
20             pair_value
21             bind_path
22             create_date
23             create_header
24             inflate_headers
25             ]]
26 19     19   16785 };
  19         229668  
27              
28 209     209 1 1056 sub pair_key { ( keys %{ $_[0] } )[0] }
  209         1245  
29 54     54 1 102 sub pair_value { ( values %{ $_[0] } )[0] }
  54         226  
30              
31             {
32             my $ACTION_PACK = HTTP::Headers::ActionPack->new;
33 131     131 0 719 sub create_header { $ACTION_PACK->create( @_ ) }
34 21     21 1 1548 sub create_date { $ACTION_PACK->create( 'DateHeader' => shift ) }
35 123     123 1 300605 sub inflate_headers { $ACTION_PACK->inflate( @_ ) }
36 18     18 0 59 sub get_action_pack { $ACTION_PACK }
37             }
38              
39             sub bind_path {
40 22     22 1 61 my ($spec, $path) = @_;
41 22         75 my @parts = grep { $_ } split /\// => $path;
  62         149  
42 22         59 my @spec = grep { $_ } split /\// => $spec;
  67         139  
43              
44 22         33 my @results;
45 22         60 foreach my $i ( 0 .. $#spec ) {
46 43 100       203 if ( $spec[ $i ] =~ /^\*$/ ) {
    100          
    100          
47 5         10 push @results => @parts;
48 5         8 @parts = ();
49 5         9 last;
50             }
51             elsif ( $spec[ $i ] =~ /^\:/ ) {
52 15 100       39 return unless defined $parts[ 0 ];
53 14         37 push @results => shift @parts;
54             }
55             elsif ( $spec[ $i ] =~ /^\?\:/ ) {
56 9 100       36 push @results => shift @parts
57             if defined $parts[ 0 ];
58             }
59             else {
60 14 50       33 return unless defined $parts[ 0 ];
61 14 100       40 return unless $spec[ $i ] eq $parts[ 0 ];
62 13         42 shift @parts;
63             }
64             }
65              
66 20 100       68 return if @parts;
67              
68             wantarray
69             ? @results
70 16 100       134 : (scalar @results == 1)
    100          
71             ? $results[0]
72             : @results;
73             }
74              
75             1;
76              
77             __END__