X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?p=scpubgit%2FTak.git;a=blobdiff_plain;f=lib%2FTak%2FRouter.pm;h=5c2502b7eb017cb8881706da2ff545e314b36d5c;hp=f7e56dd6b30a54f19aa031596db77a9111f02506;hb=2791fd73b196072f047b2b3d746b64be53312ca3;hpb=986f5290d9338118f95f2293f705368fb142d270 diff --git a/lib/Tak/Router.pm b/lib/Tak/Router.pm index f7e56dd..5c2502b 100644 --- a/lib/Tak/Router.pm +++ b/lib/Tak/Router.pm @@ -1,6 +1,7 @@ package Tak::Router; use Tak::MetaService; +use Scalar::Util qw(weaken); use Moo; has services => (is => 'ro', default => sub { {} }); @@ -12,9 +13,9 @@ sub BUILD { 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); } @@ -31,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}