Tweaked error message on failure to import.
[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;
624072a8 6 use Object::Remote::Logging qw( :log :dlog );
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;
624072a8 15 Dlog_trace { "Module sender successfully sent code for '$module': $code" } $code;
542d5b5c 16 return $fh;
17 }
624072a8 18 log_trace { "Module sender did not return code for '$module'" };
542d5b5c 19 return;
20 }
21}
22
23use Moo;
24
5e2b2229 25use Object::Remote::Logging qw( :log );
26
542d5b5c 27has module_sender => (is => 'ro', required => 1);
28
29has inc_hook => (is => 'lazy');
30
31sub _build_inc_hook {
32 my ($self) = @_;
5e2b2229 33 log_debug { "Constructing module builder hook" };
37efeb68 34 my $hook = Object::Remote::ModuleLoader::Hook->new(sender => $self->module_sender);
35 log_trace { "Done constructing module builder hook" };
55c0d020 36 return $hook;
542d5b5c 37}
38
39sub BUILD { shift->enable }
40
41sub enable {
4a9fa1a5 42 log_debug { "enabling module loader hook" };
542d5b5c 43 push @INC, shift->inc_hook;
44 return;
45}
46
47sub disable {
48 my ($self) = @_;
4a9fa1a5 49 log_debug { "disabling module loader hook" };
542d5b5c 50 my $hook = $self->inc_hook;
51 @INC = grep $_ ne $hook, @INC;
52 return;
53}
54
55sub DEMOLISH { $_[0]->disable unless $_[1] }
56
571;