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   88314  
  177         328  
  177         6726  
4             our $VERSION = '1.2019';
5              
6             use Moo;
7 177     177   80157 use namespace::clean;
  177         1602595  
  177         844  
8 177     177   291635  
  177         1457603  
  177         1028  
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 155686 if ($self->log->is_debug) {
25 64         294 $msg .= "\n\n" . $self->stack_trace->as_string;
26 62 100       1208 }
27 8         2853 $self->log->error($msg);
28             }
29 62         39112  
30             $_[0]->message;
31             }
32              
33 30     30 0 564 "";
34             }
35              
36              
37 2     2   50 use Catmandu::Sane;
38              
39             our $VERSION = '1.2019';
40              
41             use Moo::Role;
42 177     177   72293 use Catmandu::Util qw(is_string);
  177         412  
  177         5837  
43             use namespace::clean;
44              
45             has source => (is => 'rw', writer => 'set_source');
46 177     177   75033  
  177         1257777  
  177         1103  
47 177     177   138021 my $msg = "";
  177         618  
  177         18850  
48 177     177   1460 if (is_string(my $source = $_[0]->source)) {
  177         330  
  177         1455  
49             $msg .= "\nSource:";
50             for (split(/\n/, $source)) {
51             $msg .= "\n\t$_";
52             }
53 24     24   43 }
54 24 100       172 $msg;
55 15         33 }
56 15         54  
57 15         38  
58             use Catmandu::Sane;
59              
60 22         49 our $VERSION = '1.2019';
61              
62             use Moo;
63             use namespace::clean;
64              
65 177     177   78277 extends 'Catmandu::Error';
  177         370  
  177         6274  
66              
67              
68             use Catmandu::Sane;
69 177     177   983  
  177         360  
  177         1437  
70 177     177   63162 our $VERSION = '1.2019';
  177         413  
  177         871  
71              
72             use Moo;
73             use namespace::clean;
74              
75             extends 'Catmandu::BadVal';
76 177     177   42532  
  177         393  
  177         6006  
77              
78             use Catmandu::Sane;
79              
80 177     177   996 our $VERSION = '1.2019';
  177         392  
  177         800  
81 177     177   49601  
  177         482  
  177         790  
82             use Moo;
83             use namespace::clean;
84              
85             extends 'Catmandu::Error';
86              
87 177     177   40295  
  177         406  
  177         5947  
88             use Catmandu::Sane;
89              
90             our $VERSION = '1.2019';
91 177     177   1144  
  177         379  
  177         878  
92 177     177   50622 use Moo;
  177         451  
  177         874  
93             use namespace::clean;
94              
95             extends 'Catmandu::Error';
96              
97             has package_name => (is => 'ro');
98 177     177   40368  
  177         391  
  177         8657  
99             my ($self) = @_;
100             my $err = $self->message;
101             my $pkg_name = $self->package_name;
102 177     177   1074 my $msg = "Failed to load $pkg_name";
  177         398  
  177         777  
103 177     177   52887 if (my ($type, $name)
  177         400  
  177         804  
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 24 }
111 12         212 elsif ($pkg_name =~ /^Catmandu::Fix::\S+/) {
112 12         118 my ($fix_name) = $pkg_name =~ /([^:]+)$/;
113 12         43 if ($fix_name =~ /^[a-z]/) {
114 12 100       85 $msg
    50          
115             = "Tried to execute the fix '$fix_name' but can't find $pkg_name on your system.";
116             }
117 5         37 }
118             $msg .= "\nError: $err";
119             $msg .= "\nPackage name: $pkg_name";
120             $msg;
121             }
122              
123 7         36  
124 7 50       25 use Catmandu::Sane;
125 7         23  
126             our $VERSION = '1.2019';
127              
128             use Moo;
129 12         52 use namespace::clean;
130 12         28  
131 12         91 extends 'Catmandu::Error';
132              
133             with 'Catmandu::Error::Source';
134              
135             my ($self) = @_;
136 177     177   86125 my $err = $self->message;
  177         380  
  177         5792  
137             my $msg = "Syntax error in your fixes...";
138             $msg .= "\nError: $err";
139             $msg .= $self->_source_log_message;
140 177     177   938 $msg;
  177         427  
  177         752  
141 177     177   50695 }
  177         404  
  177         814  
142              
143              
144             use Catmandu::Sane;
145              
146             our $VERSION = '1.2019';
147              
148 17     17 0 37 use Moo;
149 17         286 use namespace::clean;
150 17         133  
151 17         40 extends 'Catmandu::NoSuchPackage';
152 17         54  
153 15         64 with 'Catmandu::Error::Source';
154              
155             has fix_name => (is => 'ro');
156              
157             around log_message => sub {
158 177     177   51867 my ($orig, $self) = @_;
  177         378  
  177         5839  
159             my $fix_name = $self->fix_name;
160             my $msg = $orig->($self);
161             $msg .= "\nFix name: $fix_name" if $fix_name;
162 177     177   946 $msg .= $self->_source_log_message;
  177         361  
  177         747  
163 177     177   51850 $msg;
  177         434  
  177         768  
164             };
165              
166              
167             use Catmandu::Sane;
168              
169             our $VERSION = '1.2019';
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   54974 my $err = $self->message;
  177         437  
  177         5656  
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   1011 $msg .= "\nError: $err";
  177         404  
  177         1788  
187 177     177   50387 $msg .= $self->_source_log_message;
  177         432  
  177         808  
188             $msg;
189             }
190              
191              
192             use Catmandu::Sane;
193              
194             our $VERSION = '1.2019';
195              
196             use Moo;
197 3     3 0 8 use Data::Dumper;
198 3         59 use namespace::clean;
199 3         27  
200 3         11 extends 'Catmandu::Error';
201              
202 3         25 has data => (is => 'ro');
203 3         12 has fix => (is => 'ro');
204 3         54  
205             my ($self) = @_;
206             my $err = $self->message;
207             my $fix = $self->fix;
208             my $data = $self->data;
209 177     177   60649 my $msg = "One of your fixes threw an error...";
  177         456  
  177         5744  
210             $msg .= "\nError: $err";
211             $msg .= "\nSource: $fix" if $fix;
212             $msg .= "\nInput:\n" . Dumper($data) if defined $data;
213 177     177   4777 $msg;
  177         443  
  177         713  
214 177     177   150341 }
  177         1021713  
  177         13462  
215 177     177   1323  
  177         303  
  177         1094  
216              
217             use Catmandu::Sane;
218              
219             our $VERSION = '1.2019';
220              
221             use Moo;
222             use Data::Dumper;
223 3     3 0 8 use namespace::clean;
224 3         52  
225 3         31 # avoid circular dependencies
226 3         7 require Catmandu::Util;
227 3         5  
228 3         8 extends 'Catmandu::Error';
229 3 50       11  
230 3 100       10 has code => (is => 'ro');
231 3         100 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   62269 has response_body => (is => 'ro');
  177         373  
  177         4943  
237              
238             my ($self) = @_;
239             my $err = $self->message;
240 177     177   844 my $code = $self->code;
  177         315  
  177         954  
241 177     177   53329 my $url = $self->url;
  177         429  
  177         7696  
242 177     177   1096 my $method = $self->method;
  177         523  
  177         778  
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 19 $msg .= "\nResponse headers: "
259 6         139 . $self->_headers_to_string($response_headers);
260 6         82 if (Catmandu::Util::is_string($response_body)) {
261 6         20 $msg .= "\nResponse body: \n" . $self->_indent($response_body);
262 6         22 }
263 6         22 $msg;
264 6         20 }
265 6         20  
266 6         24 my ($self, $headers) = @_;
267 6         15 my $str = "";
268 6         24 for (my $i = 0; $i < @$headers; $i++) {
269 6         20 $str .= "\n\t" . $headers->[$i++] . ": " . $headers->[$i];
270 6         14 }
271 6         20 $str;
272 6         25 }
273              
274             my ($self, $str) = @_;
275 6 100       40 $str =~ s/([^\r\n]+)/\t$1/g;
276 1         5 $str;
277             }
278 6         24  
279             1;
280 6 100       30  
281 5         22  
282             =pod
283 6         57  
284             =head1 NAME
285              
286             Catmandu::Error - Catmandu error hierarchy
287 12     12   24  
288 12         20 =head1 SYNOPSIS
289 12         43  
290 29         84 use Catmandu::Sane;
291              
292 12         52 sub be_naughty {
293             Catmandu::BadArg->throw("very naughty") if shift;
294             }
295              
296 6     6   20 try {
297 6         116 be_naughty(1);
298 6         35 } 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