fix indentation levels; remove dead comments and code
[scpubgit/Object-Remote.git] / lib / Object / Remote / ModuleLoader.pm
CommitLineData
542d5b5c 1package Object::Remote::ModuleLoader;
2
3BEGIN {
4 package Object::Remote::ModuleLoader::Hook;
5 use Moo;
4a9fa1a5 6 use Object::Remote::Logging qw(:log);
542d5b5c 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) = @_;
4a9fa1a5 12 log_debug { "Loading $module via " . ref($self) };
542d5b5c 13 if (my $code = $self->sender->source_for($module)) {
14 open my $fh, '<', \$code;
15 return $fh;
16 }
17 return;
18 }
19}
20
21use Moo;
22
5e2b2229 23use Object::Remote::Logging qw( :log );
24
542d5b5c 25has module_sender => (is => 'ro', required => 1);
26
27has inc_hook => (is => 'lazy');
28
29sub _build_inc_hook {
30 my ($self) = @_;
5e2b2229 31 log_debug { "Constructing module builder hook" };
37efeb68 32 my $hook = Object::Remote::ModuleLoader::Hook->new(sender => $self->module_sender);
33 log_trace { "Done constructing module builder hook" };
34 return $hook;
542d5b5c 35}
36
37sub BUILD { shift->enable }
38
39sub enable {
4a9fa1a5 40 log_debug { "enabling module loader hook" };
542d5b5c 41 push @INC, shift->inc_hook;
42 return;
43}
44
45sub disable {
46 my ($self) = @_;
4a9fa1a5 47 log_debug { "disabling module loader hook" };
542d5b5c 48 my $hook = $self->inc_hook;
49 @INC = grep $_ ne $hook, @INC;
50 return;
51}
52
53sub DEMOLISH { $_[0]->disable unless $_[1] }
54
551;