X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FTak%2FEvalService.pm;h=629beae38bbbe8ed992b581587de451a00544181;hb=3e8833259b5bf95efa2137543051a35e7655e1d3;hp=9a45db96fb37ed1ea8a7637a1ffec9b9c6b7efcf;hpb=36cf3bcb9b7a2e87d48ebc657f50680ef23c96fe;p=scpubgit%2FTak.git diff --git a/lib/Tak/EvalService.pm b/lib/Tak/EvalService.pm index 9a45db9..629beae 100644 --- a/lib/Tak/EvalService.pm +++ b/lib/Tak/EvalService.pm @@ -1,9 +1,11 @@ package Tak::EvalService; use Eval::WithLexicals; -use Moo; use Data::Dumper::Concise; use Capture::Tiny qw(capture); +use Moo; + +with 'Tak::Role::Service'; has 'eval_withlexicals' => (is => 'lazy'); @@ -14,12 +16,12 @@ sub _build_eval_withlexicals { sub handle_eval { my ($self, $perl) = @_; unless ($perl) { - return MISTAKE => eval_input => "No code supplied"; + die [ mistake => eval_input => "No code supplied" ]; } if (my $ref = ref($perl)) { - return MISTAKE => eval_input => "Code was a ${ref} reference"; + die [ mistake => eval_input => "Code was a ${ref} reference" ]; } - my ($code, @ret); + my ($ok, @ret); my ($stdout, $stderr); if (eval { ($stdout, $stderr) = capture { @@ -27,17 +29,18 @@ sub handle_eval { }; 1 }) { - $code = 'RESULT'; + $ok = 1; } else { - ($code, @ret) = (FAILURE => $@); + ($ok, @ret) = (0, $@); } my $dumped_ret; unless (eval { $dumped_ret = Dumper(@ret); 1 }) { - $dumped_ret = "Error dumping ${code} result: $@"; - $code = 'FAILURE'; + $dumped_ret = "Error dumping ${\($ok ? 'result' : 'exception')}: $@"; + $ok = 0; } - return $code => { - stdout => $stdout, stderr => $stderr, return => $dumped_ret + return { + stdout => $stdout, stderr => $stderr, + ($ok ? 'return' : 'exception') => $dumped_ret }; }