File Coverage

lib/Web/ComposableRequest/Role/JSON.pm
Criterion Covered Total %
statement 31 31 100.0
branch n/a
condition n/a
subroutine 11 11 100.0
pod n/a
total 42 42 100.0


line stmt bran cond sub pod time code
1             package Web::ComposableRequest::Role::JSON;
2              
3 1     1   969 use Encode qw( decode );
  1         3  
  1         83  
4 1     1   638 use JSON::MaybeXS qw( );
  1         11578  
  1         43  
5 1     1   9 use Web::ComposableRequest::Constants qw( FALSE TRUE );
  1         3  
  1         14  
6 1     1   444 use Web::ComposableRequest::Util qw( add_config_role );
  1         4  
  1         9  
7 1     1   600 use Unexpected::Types qw( Object );
  1         3  
  1         11  
8 1     1   3261 use Moo::Role;
  1         3  
  1         12  
9              
10             requires qw( content_type _config _decode_body );
11              
12             add_config_role __PACKAGE__.'::Config';
13              
14             has '_json' => is => 'lazy', isa => Object,
15 1     1   49 builder => sub { JSON::MaybeXS->new( allow_nonref => TRUE, utf8 => FALSE )};
16              
17             around '_decode_body' => sub {
18             my ($orig, $self, $body, $content) = @_;
19              
20             return $orig->($self, $body, $content)
21             unless $self->content_type eq 'application/json';
22              
23             $body->{$self->_config->json_body_attribute} = $self->_json->decode(
24             decode($self->_config->encoding, $content)
25             );
26              
27             return;
28             };
29              
30 1     1   943 use namespace::autoclean;
  1         3  
  1         10  
31              
32             package Web::ComposableRequest::Role::JSON::Config;
33              
34 1     1   110 use Unexpected::Types qw( Str );
  1         2  
  1         6  
35 1     1   2342 use Moo::Role;
  1         3  
  1         7  
36              
37             # Public attributes
38             has 'json_body_attribute' => is => 'ro', isa => Str, default => 'param';
39              
40 1     1   585 use namespace::autoclean;
  1         3  
  1         5  
41              
42             1;
43              
44             __END__