File Coverage

blib/lib/Plack/Middleware/EmulateOPTIONS.pm
Criterion Covered Total %
statement 32 32 100.0
branch 6 6 100.0
condition 6 6 100.0
subroutine 10 10 100.0
pod 2 2 100.0
total 56 56 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   2742 use v5.14;
  4         15  
6              
7 4     4   23 use warnings;
  4         12  
  4         117  
8              
9 4     4   22 use parent 'Plack::Middleware';
  4         26  
  4         29  
10              
11 4     4   280 use Plack::Util;
  4         8  
  4         117  
12 4     4   22 use Plack::Util::Accessor qw/ filter callback /;
  4         8  
  4         55  
13 4     4   257 use HTTP::Status ();
  4         10  
  4         1260  
14              
15             our $VERSION = 'v0.3.0'; # TRIAL
16              
17              
18             sub prepare_app {
19 4     4 1 531 my ($self) = @_;
20              
21 4 100       13 unless (defined $self->callback) {
22              
23             $self->callback( sub {
24 3     3   32 my ($res) = @_;
25 3         15 Plack::Util::header_set( $res->[1], 'allow', "GET, HEAD, OPTIONS" );
26 3         178 });
27              
28             }
29             }
30              
31             sub call {
32 27     27 1 172885 my ( $self, $env ) = @_;
33              
34 27         82 my $filter = $self->filter;
35 27         164 my $callback = $self->callback;
36              
37 27 100 100     199 if ( $env->{REQUEST_METHOD} eq "OPTIONS" && ( !$filter || $filter->($env) ) ) {
      100        
38              
39 9         136 my $res = $self->app->( { %$env, REQUEST_METHOD => "HEAD" } );
40              
41             return Plack::Util::response_cb(
42             $res,
43             sub {
44 9     9   154 my ($res) = @_;
45 9 100       36 if ( HTTP::Status::is_success($res->[0]) ) {
46 5         63 $callback->( $res, $env );
47             }
48             }
49 9         1613 );
50              
51             }
52             else {
53              
54 18         95 return $self->app->($env);
55              
56             }
57             }
58              
59              
60             1;
61              
62             __END__