File Coverage

lib/APISchema/Route.pm
Criterion Covered Total %
statement 46 46 100.0
branch 13 14 92.8
condition 13 14 92.8
subroutine 10 10 100.0
pod 0 5 0.0
total 82 89 92.1


line stmt bran cond sub pod time code
1             package APISchema::Route;
2 11     11   2664 use strict;
  11         24  
  11         330  
3 11     11   58 use warnings;
  11         20  
  11         306  
4              
5             # lib
6 11     11   3519 use APISchema::Resource;
  11         26  
  11         485  
7              
8             # cpan
9             use Class::Accessor::Lite (
10 11         49 new => 1,
11             rw => [qw(route title description destination method option
12             request_resource response_resource)],
13 11     11   76 );
  11         19  
14              
15             sub _canonical_resource {
16 89     89   214 my ($self, $method, $resource_root, $extra_args, $filter) = @_;
17              
18 89         165 $method = "${method}_resource";
19 89         233 my $resource = $self->$method();
20 89         445 for (@$extra_args) {
21 34 100 100     169 last unless $resource && ref $resource eq 'HASH';
22 20 100       93 last unless $resource->{$_};
23 10         19 $resource = $resource->{$_};
24             }
25 89 100       234 $resource = { body => $resource } unless ref $resource;
26              
27 89 100       217 $filter = [qw(header parameter body)] unless scalar @$filter;
28 89         163 my %filter = map { $_ => 1 } grep { $resource->{$_} } @$filter;
  89         264  
  267         462  
29             return +{
30             %$resource,
31             map {
32 89         192 my $name = $resource->{$_};
33 89         750 $_ => APISchema::Resource->new(
34             title => $name,
35             definition => ,+{
36             %$resource_root,
37             '$ref' => sprintf '#/resource/%s', $name,
38             },
39             );
40 89         279 } grep { $filter{$_} } qw(header parameter body),
  267         407  
41             };
42             }
43              
44             sub canonical_request_resource {
45 41     41 0 108 my ($self, $resource_root, $extra_args, $filter) = @_;
46 41   100     200 return $self->_canonical_resource(
      100        
47             request => $resource_root,
48             $extra_args // [], $filter // [],
49             );
50             }
51              
52             sub canonical_response_resource {
53 48     48 0 138 my ($self, $resource_root, $extra_args, $filter) = @_;
54 48   50     227 return $self->_canonical_resource(
      100        
55             response => $resource_root,
56             $extra_args // [], $filter // [],
57             );
58             }
59              
60             sub responsible_code_is_specified {
61 38     38 0 49 my ($self) = @_;
62 38         69 my $res = $self->response_resource;
63 38 100 100     279 return unless $res && ref $res;
64              
65 10         29 my @codes = sort grep { $_ =~ qr!\A[0-9]+\z! } keys %$res;
  20         128  
66 10         66 return @codes > 0;
67             }
68              
69             sub responsible_codes {
70 27     27 0 17143 my ($self) = @_;
71              
72 27 100       61 return [200] unless $self->responsible_code_is_specified;
73              
74 5         16 my $res = $self->response_resource;
75 5         33 my @codes = sort grep { $_ =~ qr!\A[0-9]+\z! } keys %$res;
  9         393  
76 5 50       40 return @codes ? [@codes] : [200];
77             }
78              
79             sub default_responsible_code {
80 17     17 0 3278 my ($self) = @_;
81              
82 17         35 $self->responsible_codes->[0];
83             }
84              
85             1;