File Coverage

blib/lib/Plack/Middleware/EmulateOPTIONS.pm
Criterion Covered Total %
statement 43 43 100.0
branch 6 6 100.0
condition 6 6 100.0
subroutine 11 11 100.0
pod 2 2 100.0
total 68 68 100.0


line stmt bran cond sub pod time code
1             package Plack::Middleware::EmulateOPTIONS;
2              
3             # ABSTRACT: handle OPTIONS requests as HEAD
4              
5 4     4   1902434 use v5.20;
  4         15  
6              
7 4     4   20 use warnings;
  4         13  
  4         316  
8              
9 4     4   22 use parent 'Plack::Middleware';
  4         8  
  4         62  
10              
11 4     4   267 use Plack::Util;
  4         8  
  4         120  
12 4     4   22 use Plack::Util::Accessor qw( filter callback );
  4         5  
  4         32  
13 4     4   244 use HTTP::Status ();
  4         12  
  4         86  
14              
15 4     4   585 use experimental qw( postderef signatures );
  4         2031  
  4         33  
16              
17             our $VERSION = 'v0.4.0';
18              
19              
20 4     4 1 568 sub prepare_app($self) {
  4         11  
  4         8  
21              
22 4 100       17 unless ( defined $self->callback ) {
23              
24 3         15 $self->callback(
25 3     3   8 sub( $res, $env ) {
  3         6  
  3         44  
26 3         30 Plack::Util::header_set( $res->[1], 'allow', "GET, HEAD, OPTIONS" );
27             }
28 3         163 );
29              
30             }
31             }
32              
33 27     27 1 194750 sub call( $self, $env ) {
  27         91  
  27         49  
  27         37  
34              
35 27         121 my $filter = $self->filter;
36 27         215 my $callback = $self->callback;
37              
38 27 100 100     247 if ( $env->{REQUEST_METHOD} eq "OPTIONS" && ( !$filter || $filter->($env) ) ) {
      100        
39              
40 9         177 my $res = $self->app->( { $env->%*, REQUEST_METHOD => "HEAD" } );
41              
42             return Plack::Util::response_cb(
43             $res,
44             sub {
45 9     9   150 my ($res) = @_;
46 9 100       48 if ( HTTP::Status::is_success( $res->[0] ) ) {
47 5         75 $callback->( $res, $env );
48             }
49             }
50 9         2004 );
51              
52             }
53             else {
54              
55 18         125 return $self->app->($env);
56              
57             }
58             }
59              
60              
61             1;
62              
63             __END__