File Coverage

blib/lib/Error/Pure/HTTP/JSON/Advance.pm
Criterion Covered Total %
statement 32 40 80.0
branch 4 6 66.6
condition 1 3 33.3
subroutine 9 9 100.0
pod 1 1 100.0
total 47 59 79.6


line stmt bran cond sub pod time code
1             package Error::Pure::HTTP::JSON::Advance;
2              
3 3     3   157265 use base qw(Exporter);
  3         7  
  3         514  
4 3     3   19 use strict;
  3         8  
  3         70  
5 3     3   11 use warnings;
  3         6  
  3         159  
6              
7 3     3   1434 use Error::Pure::Output::JSON qw(err_json);
  3         51189  
  3         76  
8 3     3   1642 use Error::Pure::Utils qw(err_helper);
  3         4775  
  3         57  
9 3     3   240 use List::Util 1.33 qw(none);
  3         57  
  3         343  
10 3     3   17 use Readonly;
  3         4  
  3         1259  
11              
12             # Constants.
13             Readonly::Array our @EXPORT_OK => qw(err);
14             Readonly::Scalar my $EVAL => 'eval {...}';
15              
16             our $VERSION = 0.06;
17              
18             # Global variables.
19             our %ERR_PARAMETERS;
20              
21             # Ignore die signal.
22             $SIG{__DIE__} = 'IGNORE';
23              
24             # Process error.
25             sub err {
26 5     5 1 334289 my @msg = @_;
27              
28             # Get errors structure.
29 5         24 my @errors = err_helper(@msg);
30              
31             # Finalize in main on last err.
32 5         1156 my $stack_ar = $errors[-1]->{'stack'};
33 5 50 33     40 if ($stack_ar->[-1]->{'class'} eq 'main'
34 10 100   10   68 && none { $_ eq $EVAL || $_ =~ /^eval '/ms }
35 10         36 map { $_->{'sub'} } @{$stack_ar}) {
  5         13  
36              
37             # Construct error structure.
38 0         0 my $err_hr = {
39             'error-pure' => \@errors,
40             };
41 0         0 foreach my $key (keys %ERR_PARAMETERS) {
42 0         0 $err_hr->{$key} = $ERR_PARAMETERS{$key};
43             }
44              
45             # Print out.
46 0         0 print "Content-type: application/json\n\n";
47 0         0 print err_json($err_hr);
48 0         0 return;
49              
50             # Die for eval.
51             } else {
52 5         13 my $e = $errors[-1]->{'msg'}->[0];
53 5 50       13 if (! defined $e) {
54 0         0 $e = 'undef';
55             } else {
56 5         26 chomp $e;
57             }
58 5         47 die "$e\n";
59             }
60              
61 0           return;
62             }
63              
64             1;
65              
66             __END__