repl works again
[scpubgit/Tak.git] / lib / Tak / MetaService.pm
index 4dfe9d4..62bafa8 100644 (file)
@@ -1,5 +1,6 @@
 package Tak::MetaService;
 
+use Tak::WeakClient;
 use Moo;
 
 with 'Tak::Role::Service';
@@ -11,10 +12,16 @@ sub handle_pid {
 }
 
 sub handle_register {
-  my ($self, $name, $class, @args) = @_;
+  my ($self, $name, $class, %args) = @_;
   (my $file = $class) =~ s/::/\//g;
   require "${file}.pm";
-  my $new = $class->new(@args);
+  if (my $expose = delete $args{expose}) {
+    my $client = Tak::WeakClient->new(service => $self->router);
+    foreach my $name (%$expose) {
+      $args{$name} = $client->curry(@{$expose->{$name}});
+    }
+  }
+  my $new = $class->new(\%args);
   $self->router->register($name => $new);
   return "Registered ${name}";
 }