repl works again
[scpubgit/Tak.git] / lib / Tak / ModuleLoader.pm
index 924230b..bea9c49 100644 (file)
@@ -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;