File Coverage

blib/lib/WWW/JSON/Response.pm
Criterion Covered Total %
statement 31 31 100.0
branch 7 8 87.5
condition 3 3 100.0
subroutine 11 11 100.0
pod 2 2 100.0
total 54 55 98.1


line stmt bran cond sub pod time code
1             package WWW::JSON::Response;
2 8     8   33 use strict;
  8         11  
  8         306  
3 8     8   85 use warnings;
  8         12  
  8         168  
4 8     8   29 use Moo;
  8         15  
  8         37  
5 8     8   6991 use JSON::XS;
  8         35822  
  8         525  
6 8     8   46 use Try::Tiny;
  8         9  
  8         2412  
7              
8             has http_response => (
9             is => 'ro',
10             required => 1,
11              
12             handles => {
13             status_line => 'status_line',
14             code => 'code',
15             url => 'base',
16             content => 'decoded_content',
17             },
18             );
19             has json => ( is => 'lazy', default => sub { JSON::XS->new } );
20             has response => ( is => 'lazy', builder => '_build_response' );
21             has error => ( is => 'lazy', writer => '_set_error' );
22             has request_object => ( is => 'ro' );
23             has _response_transform => ( is => 'ro' );
24              
25 13     13 1 15938 sub success { !shift->error }
26              
27             sub _build_error {
28 18     18   2550 my $self = shift;
29 18         75 $self->_set_error('');
30 18         218 $self->response;
31 18         521 return $self->error;
32             }
33              
34             sub _build_response {
35 23     23   2434 my $self = shift;
36              
37 23 100       113 $self->_set_error( $self->status_line )
38             unless ( $self->http_response->is_success );
39              
40 23 100       1346 return unless ($self->http_response->decoded_content);
41              
42             my $decoded = try {
43 21     21   1007 $self->json->decode( $self->http_response->decoded_content );
44             }
45             catch {
46 1 50   1   589 $self->_set_error("$_") unless ( $self->error );
47 1         12 return;
48 21         2219 };
49              
50 21 100 100     4609 if ( !( $self->error ) && $self->_response_transform ) {
51 2         25 $decoded = $self->_response_transform->($decoded);
52             }
53 21         285 return $decoded;
54             }
55              
56 14     14 1 12121 sub res { shift->response }
57              
58             1;
59              
60             __END__