start adding logs and add support for routed logs and logging to stderr
[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 #TODO not logging - timing issue?
13 log_debug { "Loading $module via " . ref($self) };
542d5b5c 14 if (my $code = $self->sender->source_for($module)) {
15 open my $fh, '<', \$code;
16 return $fh;
17 }
18 return;
19 }
20}
21
22use Moo;
23
5e2b2229 24use Object::Remote::Logging qw( :log );
25
542d5b5c 26has module_sender => (is => 'ro', required => 1);
27
28has inc_hook => (is => 'lazy');
29
30sub _build_inc_hook {
31 my ($self) = @_;
5e2b2229 32 log_debug { "Constructing module builder hook" };
33 #TODO why didn't log_trace return the argument?
34 logS_trace { "Done constructing module builder hook" }
35 Object::Remote::ModuleLoader::Hook->new(sender => $self->module_sender);
542d5b5c 36}
37
38sub BUILD { shift->enable }
39
40sub enable {
4a9fa1a5 41 log_debug { "enabling module loader hook" };
542d5b5c 42 push @INC, shift->inc_hook;
43 return;
44}
45
46sub disable {
47 my ($self) = @_;
4a9fa1a5 48 log_debug { "disabling module loader hook" };
542d5b5c 49 my $hook = $self->inc_hook;
50 @INC = grep $_ ne $hook, @INC;
51 return;
52}
53
54sub DEMOLISH { $_[0]->disable unless $_[1] }
55
561;