cleanup trailing whitespace ugliness
[scpubgit/Object-Remote.git] / lib / Object / Remote / ModuleLoader.pm
1 package Object::Remote::ModuleLoader;
2
3 BEGIN {
4   package Object::Remote::ModuleLoader::Hook;
5   use Moo;
6   use Object::Remote::Logging qw( :log :dlog );
7   has sender => (is => 'ro', required => 1);
8
9   # unqualified INC forced into package main
10   sub Object::Remote::ModuleLoader::Hook::INC {
11     my ($self, $module) = @_;
12     log_debug { "Loading $module via " . ref($self) };
13     if (my $code = $self->sender->source_for($module)) {
14       open my $fh, '<', \$code;
15       Dlog_trace { "Module sender successfully sent code for '$module': $code" } $code;
16       return $fh;
17     }
18     log_trace { "Module sender did not return code for '$module'" };
19     return;
20   }
21 }
22
23 use Moo;
24
25 use Object::Remote::Logging qw( :log );
26
27 has module_sender => (is => 'ro', required => 1);
28
29 has inc_hook => (is => 'lazy');
30
31 sub _build_inc_hook {
32   my ($self) = @_;
33   log_debug { "Constructing module builder hook" };
34   my $hook = Object::Remote::ModuleLoader::Hook->new(sender => $self->module_sender);
35   log_trace { "Done constructing module builder hook" };
36   return $hook;
37 }
38
39 sub BUILD { shift->enable }
40
41 sub enable {
42   log_debug { "enabling module loader hook" };
43   push @INC, shift->inc_hook;
44   return;
45 }
46
47 sub disable {
48   my ($self) = @_;
49   log_debug { "disabling module loader hook" };
50   my $hook = $self->inc_hook;
51   @INC = grep $_ ne $hook, @INC;
52   return;
53 }
54
55 sub DEMOLISH { $_[0]->disable unless $_[1] }
56
57 1;