X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?p=scpubgit%2FTak.git;a=blobdiff_plain;f=lib%2FTak%2FModuleLoader.pm;h=bea9c49424987380766a7ca1b92e59af61a49873;hp=924230b9893e6d7117408c699f3dc8506d95e6a2;hb=2791fd73b196072f047b2b3d746b64be53312ca3;hpb=986f5290d9338118f95f2293f705368fb142d270 diff --git a/lib/Tak/ModuleLoader.pm b/lib/Tak/ModuleLoader.pm index 924230b..bea9c49 100644 --- a/lib/Tak/ModuleLoader.pm +++ b/lib/Tak/ModuleLoader.pm @@ -1,23 +1,35 @@ package Tak::ModuleLoader; +use Tak::ModuleLoader::Hook; use Moo; -has remote => (is => 'ro', required => 1); +with 'Tak::Role::Service'; -sub inc_callback { +has module_sender => (is => 'ro', required => 1); + +has inc_hook => (is => 'lazy'); + +sub _build_inc_hook { + my ($self) = @_; + Tak::ModuleLoader::Hook->new(sender => $self->module_sender); +} + +sub handle_enable { my ($self) = @_; - sub { return if our $In_Reentry; $self->maybe_load_module($_[1]) } + push @INC, $self->inc_hook; + return 'enabled'; } -sub maybe_load_module { - my ($self, $module) = @_; - local our $In_Reentry = 1; - my ($status, $code) = $self->remote->blocking_request(source_for => $module); - if ($status eq 'RESULT') { - open my $fh, '<', \$code; - return $fh; - } - return; +sub handle_disable { + my ($self) = @_; + my $hook = $self->inc_hook; + @INC = grep $_ ne $hook, @INC; + return 'disabled'; +} + +sub DEMOLISH { + my ($self) = @_; + $self->handle_disable; } 1;