new Client/Router/Service arch
[scpubgit/Tak.git] / lib / Tak / EvalService.pm
index 9a45db9..629beae 100644 (file)
@@ -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
   };
 }