X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?p=scpubgit%2FTak.git;a=blobdiff_plain;f=lib%2FTak%2FMetaService.pm;h=62bafa8775a88b117ff7df810837ce84ef1e30c5;hp=4dfe9d44af0a587e47cd53dfc99c259d668773fa;hb=2791fd73b196072f047b2b3d746b64be53312ca3;hpb=986f5290d9338118f95f2293f705368fb142d270 diff --git a/lib/Tak/MetaService.pm b/lib/Tak/MetaService.pm index 4dfe9d4..62bafa8 100644 --- a/lib/Tak/MetaService.pm +++ b/lib/Tak/MetaService.pm @@ -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}"; }