protect against re-upgrading
[scpubgit/Tak.git] / lib / Tak / Router.pm
index 3041f02..5c2502b 100644 (file)
@@ -1,14 +1,21 @@
 package Tak::Router;
 
+use Tak::MetaService;
+use Scalar::Util qw(weaken);
 use Moo;
 
 has services => (is => 'ro', default => sub { {} });
 
+sub BUILD {
+  my ($self) = @_;
+  $self->register(meta => Tak::MetaService->new(router => $self));
+}
+
 sub start_request {
   my ($self, $req, $target, @payload) = @_;
-  $req->mistake("Reached router with no target")
+  return $req->mistake("Reached router with no target")
     unless $target;
-  $req->failure("Reached router with invalid target ${target}")
+  return $req->failure("Reached router with invalid target ${target}")
     unless my $next = $self->services->{$target};
   $next->start_request($req, @payload);
 }
@@ -25,6 +32,11 @@ sub register {
   $self->services->{$name} = $service;
 }
 
+sub register_weak {
+  my ($self, $name, $service) = @_;
+  weaken($self->services->{$name} = $service);
+}
+
 sub deregister {
   my ($self, $name) = @_;
   delete $self->services->{$name}