File Coverage

blib/lib/Net/Airbrake/Error.pm
Criterion Covered Total %
statement 21 21 100.0
branch 8 8 100.0
condition n/a
subroutine 5 5 100.0
pod 0 2 0.0
total 34 36 94.4


line stmt bran cond sub pod time code
1             package Net::Airbrake::Error;
2              
3 4     4   13442 use strict;
  4         5  
  4         120  
4 4     4   15 use warnings;
  4         4  
  4         106  
5              
6 4     4   714 use Class::Tiny qw(type message backtrace);
  4         3820  
  4         17  
7              
8             sub BUILDARGS {
9 8     8 0 9174 my $class = shift;
10 8         9 my ($param) = @_;
11              
12 8 100       64 if (ref $param eq 'HASH') {
    100          
    100          
13 2         3 return $param;
14             }
15             elsif (ref $param) {
16 1         406894 require Data::Dumper;
17 1         4851 return { type => ref $param, message => Data::Dumper::Dumper($param) };
18             }
19             elsif ($param =~ /^(.+) at (.+) line (\d+)\.$/) {
20             return {
21 3         27 type => 'CORE::die',
22             message => $1,
23             backtrace => [ { file => $2, line => $3, function => 'N/A' } ],
24             };
25             }
26             else {
27 2         10 return { type => 'error', message => "$param" };
28             }
29             }
30              
31             sub to_hash {
32 2     2 0 3 my $self = shift;
33              
34             {
35 1         88 type => $self->type,
36             message => $self->message,
37             backtrace => [
38             map {
39 2 100       83 +{
40             file => '' . $_->{file},
41             line => 0 + $_->{line},
42             function => '' . $_->{function},
43             }
44 2         30 } @{$self->backtrace || []}
45             ],
46             };
47             }
48              
49             1;
50             __END__