File Coverage

blib/lib/Error/Pure/JSON/Advance.pm
Criterion Covered Total %
statement 29 34 85.2
branch 3 4 75.0
condition 1 3 33.3
subroutine 9 9 100.0
pod 1 1 100.0
total 43 51 84.3


line stmt bran cond sub pod time code
1             package Error::Pure::JSON::Advance;
2              
3             # Pragmas.
4 3     3   33061 use base qw(Exporter);
  3         7  
  3         328  
5 3     3   16 use strict;
  3         6  
  3         71  
6 3     3   14 use warnings;
  3         10  
  3         86  
7              
8             # Modules.
9 3     3   2694 use Error::Pure::Output::JSON qw(err_json);
  3         116880  
  3         76  
10 3     3   2822 use Error::Pure::Utils qw(err_helper);
  3         4412  
  3         61  
11 3     3   2744 use List::MoreUtils qw(none);
  3         35870  
  3         22  
12 3     3   1866 use Readonly;
  3         8  
  3         993  
13              
14             # Constants.
15             Readonly::Array our @EXPORT_OK => qw(err);
16             Readonly::Scalar my $EVAL => 'eval {...}';
17              
18             # Version.
19             our $VERSION = 0.07;
20              
21             # Global variables.
22             our %ERR_PARAMETERS;
23              
24             # Ignore die signal.
25             $SIG{__DIE__} = 'IGNORE';
26              
27             # Process error.
28             sub err {
29 5     5 1 1155 my @msg = @_;
30              
31             # Get errors structure.
32 5         17 my @errors = err_helper(@msg);
33              
34             # Finalize in main on last err.
35 5         956 my $stack_ar = $errors[-1]->{'stack'};
36 5 50 33     26 if ($stack_ar->[-1]->{'class'} eq 'main'
37 10 100   10   44 && none { $_ eq $EVAL || $_ =~ /^eval '/ms }
38 10         38 map { $_->{'sub'} } @{$stack_ar}) {
  5         11  
39              
40 0         0 my $err_hr = {
41             'error-pure' => \@errors,
42             };
43 0         0 foreach my $key (keys %ERR_PARAMETERS) {
44 0         0 $err_hr->{$key} = $ERR_PARAMETERS{$key};
45             }
46 0         0 die err_json($err_hr)."\n";
47              
48             # Die for eval.
49             } else {
50 5         27 die "$errors[-1]->{'msg'}->[0]\n";
51             }
52              
53 0           return;
54             }
55              
56             1;
57              
58             __END__