fix comments that were in wrong spot from refactoring
[scpubgit/Object-Remote.git] / lib / Object / Remote / FromData.pm
1 package Object::Remote::FromData;
2
3 use strictures 1;
4 use Object::Remote;
5 use Object::Remote::Logging qw ( :log );
6
7 our %Modules;
8 our %Not_Loaded_Yet;
9 our %Seen;
10
11 sub import {
12   my $target = caller;
13   log_trace { "import has been invoked by '$target' on " . __PACKAGE__ };
14   return if $Seen{$target};
15   log_debug { "'$target' has not yet loaded " . __PACKAGE__ };
16   $Seen{$target} = $Not_Loaded_Yet{$target} = 1;
17 }
18
19 sub flush_loaded {
20   log_debug { "flushing the loaded classes" };
21   foreach my $key (keys %Not_Loaded_Yet) {
22     log_trace { "flushing '$key'" };
23     my $data_fh = do { no strict 'refs'; *{"${key}::DATA"} };
24     my $data = do { local $/; <$data_fh> };
25     my %modules = reverse(
26       $data =~ m/(^package ([^;]+);\n.*?(?:(?=^package)|\Z))/msg
27     );
28     $_ .= "\n1;\n" for values %modules;
29     @Modules{keys %modules} = values %modules;
30     delete $Not_Loaded_Yet{$key};
31   }
32   log_trace { "done flushing loaded classes" };
33 }
34
35 sub find_module {
36   flush_loaded;
37   my ($module) = @_;
38   $module =~ s/\//::/g;
39   $module =~ s/\.pm$//;
40   return $Modules{$module};
41 }
42
43 1;