File Coverage

blib/lib/Catmandu/Error.pm
Criterion Covered Total %
statement 184 184 100.0
branch 15 18 83.3
condition n/a
subroutine 47 47 100.0
pod 0 7 0.0
total 246 256 96.0


line stmt bran cond sub pod time code
1              
2             use Catmandu::Sane;
3 177     177   110135  
  177         339  
  177         6706  
4             our $VERSION = '1.2018';
5              
6             use Moo;
7 177     177   79542 use namespace::clean;
  177         1603766  
  177         855  
8 177     177   290993  
  177         1455921  
  177         1026  
9             extends 'Throwable::Error';
10              
11             with 'Catmandu::Logger';
12              
13             has message => (
14             is => 'lazy',
15             coerce => sub {
16             my $msg = $_[0] // "";
17             $msg =~ s/\s+$//;
18             $msg;
19             }
20             );
21              
22             my ($self) = @_;
23             my $msg = $self->log_message;
24 64     64 0 158478 if ($self->log->is_debug) {
25 64         312 $msg .= "\n\n" . $self->stack_trace->as_string;
26 62 100       1210 }
27 8         3690 $self->log->error($msg);
28             }
29 62         39033  
30             $_[0]->message;
31             }
32              
33 30     30 0 460 "";
34             }
35              
36              
37 2     2   33 use Catmandu::Sane;
38              
39             our $VERSION = '1.2018';
40              
41             use Moo::Role;
42 177     177   72157 use Catmandu::Util qw(is_string);
  177         392  
  177         5951  
43             use namespace::clean;
44              
45             has source => (is => 'rw', writer => 'set_source');
46 177     177   74094  
  177         1251852  
  177         1035  
47 177     177   140255 my $msg = "";
  177         630  
  177         18967  
48 177     177   1449 if (is_string(my $source = $_[0]->source)) {
  177         329  
  177         1455  
49             $msg .= "\nSource:";
50             for (split(/\n/, $source)) {
51             $msg .= "\n\t$_";
52             }
53 24     24   51 }
54 24 100       204 $msg;
55 15         33 }
56 15         65  
57 15         42  
58             use Catmandu::Sane;
59              
60 22         52 our $VERSION = '1.2018';
61              
62             use Moo;
63             use namespace::clean;
64              
65 177     177   76659 extends 'Catmandu::Error';
  177         374  
  177         6289  
66              
67              
68             use Catmandu::Sane;
69 177     177   1044  
  177         368  
  177         1416  
70 177     177   62310 our $VERSION = '1.2018';
  177         399  
  177         864  
71              
72             use Moo;
73             use namespace::clean;
74              
75             extends 'Catmandu::BadVal';
76 177     177   42841  
  177         395  
  177         5843  
77              
78             use Catmandu::Sane;
79              
80 177     177   999 our $VERSION = '1.2018';
  177         414  
  177         814  
81 177     177   51039  
  177         447  
  177         735  
82             use Moo;
83             use namespace::clean;
84              
85             extends 'Catmandu::Error';
86              
87 177     177   39786  
  177         423  
  177         6032  
88             use Catmandu::Sane;
89              
90             our $VERSION = '1.2018';
91 177     177   1161  
  177         384  
  177         768  
92 177     177   50374 use Moo;
  177         455  
  177         817  
93             use namespace::clean;
94              
95             extends 'Catmandu::Error';
96              
97             has package_name => (is => 'ro');
98 177     177   40270  
  177         380  
  177         8288  
99             my ($self) = @_;
100             my $err = $self->message;
101             my $pkg_name = $self->package_name;
102 177     177   1075 my $msg = "Failed to load $pkg_name";
  177         377  
  177         823  
103 177     177   52246 if (my ($type, $name)
  177         421  
  177         856  
104             = $pkg_name =~ /^Catmandu::(Importer|Exporter|Store)::(\S+)/)
105             {
106             $msg
107             = "Can't find the "
108             . lc($type)
109             . " '$name' in your configuration file or $pkg_name is not installed.";
110 12     12 0 30 }
111 12         230 elsif ($pkg_name =~ /^Catmandu::Fix::\S+/) {
112 12         134 my ($fix_name) = $pkg_name =~ /([^:]+)$/;
113 12         37 if ($fix_name =~ /^[a-z]/) {
114 12 100       110 $msg
    50          
115             = "Tried to execute the fix '$fix_name' but can't find $pkg_name on your system.";
116             }
117 5         34 }
118             $msg .= "\nError: $err";
119             $msg .= "\nPackage name: $pkg_name";
120             $msg;
121             }
122              
123 7         47  
124 7 50       25 use Catmandu::Sane;
125 7         37  
126             our $VERSION = '1.2018';
127              
128             use Moo;
129 12         44 use namespace::clean;
130 12         43  
131 12         164 extends 'Catmandu::Error';
132              
133             with 'Catmandu::Error::Source';
134              
135             my ($self) = @_;
136 177     177   85919 my $err = $self->message;
  177         369  
  177         5663  
137             my $msg = "Syntax error in your fixes...";
138             $msg .= "\nError: $err";
139             $msg .= $self->_source_log_message;
140 177     177   906 $msg;
  177         388  
  177         745  
141 177     177   50077 }
  177         466  
  177         821  
142              
143              
144             use Catmandu::Sane;
145              
146             our $VERSION = '1.2018';
147              
148 17     17 0 30 use Moo;
149 17         250 use namespace::clean;
150 17         123  
151 17         53 extends 'Catmandu::NoSuchPackage';
152 17         48  
153 15         113 with 'Catmandu::Error::Source';
154              
155             has fix_name => (is => 'ro');
156              
157             around log_message => sub {
158 177     177   51952 my ($orig, $self) = @_;
  177         453  
  177         5611  
159             my $fix_name = $self->fix_name;
160             my $msg = $orig->($self);
161             $msg .= "\nFix name: $fix_name" if $fix_name;
162 177     177   945 $msg .= $self->_source_log_message;
  177         351  
  177         755  
163 177     177   51872 $msg;
  177         420  
  177         767  
164             };
165              
166              
167             use Catmandu::Sane;
168              
169             our $VERSION = '1.2018';
170              
171             use Moo;
172             use namespace::clean;
173              
174             extends 'Catmandu::BadArg';
175              
176             with 'Catmandu::Error::Source';
177              
178             has package_name => (is => 'ro');
179             has fix_name => (is => 'ro');
180              
181             my ($self) = @_;
182 177     177   54571 my $err = $self->message;
  177         372  
  177         5623  
183             my $fix_name = $self->fix_name;
184             my $msg
185             = "The fix '$fix_name' was called with missing or wrong arguments.";
186 177     177   1025 $msg .= "\nError: $err";
  177         399  
  177         1763  
187 177     177   50025 $msg .= $self->_source_log_message;
  177         448  
  177         800  
188             $msg;
189             }
190              
191              
192             use Catmandu::Sane;
193              
194             our $VERSION = '1.2018';
195              
196             use Moo;
197 3     3 0 9 use Data::Dumper;
198 3         94 use namespace::clean;
199 3         41  
200 3         13 extends 'Catmandu::Error';
201              
202 3         12 has data => (is => 'ro');
203 3         16 has fix => (is => 'ro');
204 3         126  
205             my ($self) = @_;
206             my $err = $self->message;
207             my $fix = $self->fix;
208             my $data = $self->data;
209 177     177   60387 my $msg = "One of your fixes threw an error...";
  177         413  
  177         5700  
210             $msg .= "\nError: $err";
211             $msg .= "\nSource: $fix" if $fix;
212             $msg .= "\nInput:\n" . Dumper($data) if defined $data;
213 177     177   4614 $msg;
  177         458  
  177         736  
214 177     177   149526 }
  177         1018738  
  177         13563  
215 177     177   1341  
  177         301  
  177         1196  
216              
217             use Catmandu::Sane;
218              
219             our $VERSION = '1.2018';
220              
221             use Moo;
222             use Data::Dumper;
223 3     3 0 10 use namespace::clean;
224 3         65  
225 3         35 # avoid circular dependencies
226 3         12 require Catmandu::Util;
227 3         8  
228 3         11 extends 'Catmandu::Error';
229 3 50       13  
230 3 100       12 has code => (is => 'ro');
231 3         207 has url => (is => 'ro');
232             has method => (is => 'ro');
233             has request_headers => (is => 'ro');
234             has request_body => (is => 'ro');
235             has response_headers => (is => 'ro');
236 177     177   62070 has response_body => (is => 'ro');
  177         359  
  177         4709  
237              
238             my ($self) = @_;
239             my $err = $self->message;
240 177     177   835 my $code = $self->code;
  177         331  
  177         954  
241 177     177   53924 my $url = $self->url;
  177         388  
  177         7556  
242 177     177   1060 my $method = $self->method;
  177         383  
  177         777  
243             my $request_body = $self->request_body;
244             my $response_body = $self->response_body;
245             my $request_headers = $self->request_headers;
246             my $response_headers = $self->response_headers;
247             my $msg = "Got a HTTP error...";
248             $msg .= "\nError: $err";
249             $msg .= "\nCode: $code";
250             $msg .= "\nURL: $url";
251             $msg .= "\nMethod: $method";
252             $msg .= "\nRequest headers: "
253             . $self->_headers_to_string($request_headers);
254              
255             if (Catmandu::Util::is_string($request_body)) {
256             $msg .= "\nRequest body: \n" . $self->_indent($request_body);
257             }
258 6     6 0 17 $msg .= "\nResponse headers: "
259 6         185 . $self->_headers_to_string($response_headers);
260 6         107 if (Catmandu::Util::is_string($response_body)) {
261 6         25 $msg .= "\nResponse body: \n" . $self->_indent($response_body);
262 6         33 }
263 6         131 $msg;
264 6         25 }
265 6         18  
266 6         18 my ($self, $headers) = @_;
267 6         14 my $str = "";
268 6         26 for (my $i = 0; $i < @$headers; $i++) {
269 6         17 $str .= "\n\t" . $headers->[$i++] . ": " . $headers->[$i];
270 6         17 }
271 6         21 $str;
272 6         28 }
273              
274             my ($self, $str) = @_;
275 6 100       36 $str =~ s/([^\r\n]+)/\t$1/g;
276 1         3 $str;
277             }
278 6         18  
279             1;
280 6 100       29  
281 5         26  
282             =pod
283 6         93  
284             =head1 NAME
285              
286             Catmandu::Error - Catmandu error hierarchy
287 12     12   29  
288 12         20 =head1 SYNOPSIS
289 12         38  
290 29         87 use Catmandu::Sane;
291              
292 12         48 sub be_naughty {
293             Catmandu::BadArg->throw("very naughty") if shift;
294             }
295              
296 6     6   16 try {
297 6         165 be_naughty(1);
298 6         39 } catch_case [
299             'Catmandu::BadArg' => sub {
300             say "sorry";
301             }
302             ];
303              
304             =head1 CURRRENT ERROR HIERARCHY
305             Throwable::Error
306             Catmandu::Error
307             Catmandu::BadVal
308             Catmandu::BadArg
309             Catmandu::BadFixArg
310             Catmandu::NotImplemented
311             Catmandu::NoSuchPackage
312             Catmandu::NoSuchFixPackage
313             Catmandu::FixParseError
314             Catmandu::FixError
315             Catmandu::HTTPError
316              
317             =head1 SEE ALSO
318              
319             L<Throwable>
320              
321             =cut