use all non-arch-specific non-core dirs in @INC
[scpubgit/Tak.git] / lib / Tak / MetaService.pm
CommitLineData
857f4834 1package Tak::MetaService;
2
2791fd73 3use Tak::WeakClient;
857f4834 4use Moo;
5
31a246e4 6with 'Tak::Role::Service';
7
857f4834 8has router => (is => 'ro', required => 1, weak_ref => 1);
9
77bf1d9b 10sub handle_pid {
11 return $$;
12}
13
e99bc141 14sub handle_ensure {
15 my $self = shift;
16 my ($name) = @_;
17 return "Already have ${name}" if $self->router->services->{$name};
18 $self->handle_register(@_);
19}
20
857f4834 21sub handle_register {
2791fd73 22 my ($self, $name, $class, %args) = @_;
857f4834 23 (my $file = $class) =~ s/::/\//g;
24 require "${file}.pm";
2791fd73 25 if (my $expose = delete $args{expose}) {
26 my $client = Tak::WeakClient->new(service => $self->router);
27 foreach my $name (%$expose) {
28 $args{$name} = $client->curry(@{$expose->{$name}});
29 }
30 }
31 my $new = $class->new(\%args);
857f4834 32 $self->router->register($name => $new);
31a246e4 33 return "Registered ${name}";
857f4834 34}
35
361;