File Coverage

blib/lib/Object/Remote/FromData.pm
Criterion Covered Total %
statement 36 41 87.8
branch 1 2 50.0
condition n/a
subroutine 7 12 58.3
pod 0 2 0.0
total 44 57 77.1


line stmt bran cond sub pod time code
1             package Object::Remote::FromData;
2              
3 4     4   211490 use strictures 1;
  4         29  
  4         132  
4 4     4   1127 use Object::Remote;
  4         9  
  4         110  
5 4     4   17 use Object::Remote::Logging qw ( :log );
  4         5  
  4         19  
6              
7             our %Modules;
8             our %Not_Loaded_Yet;
9             our %Seen;
10              
11             sub import {
12 4     4   45 my $target = caller;
13 4     0   27 log_trace { "import has been invoked by '$target' on " . __PACKAGE__ };
  0         0  
14 4 50       46 return if $Seen{$target};
15 4     0   18 log_debug { "'$target' has not yet loaded " . __PACKAGE__ };
  0         0  
16 4         106350 $Seen{$target} = $Not_Loaded_Yet{$target} = 1;
17             }
18              
19             sub flush_loaded {
20 0     0 0 0 log_debug { "flushing the loaded classes" };
  7     7   46  
21 7         78 foreach my $key (keys %Not_Loaded_Yet) {
22 4     0   36 log_trace { "flushing '$key'" };
  0         0  
23 4     4   25 my $data_fh = do { no strict 'refs'; *{"${key}::DATA"} };
  4         6  
  4         1173  
  4         37  
  4         8  
  4         34  
24 4         11 my $data = do { local $/; <$data_fh> };
  4         16  
  4         132  
25 4         71 my %modules = reverse(
26             $data =~ m/(^package ([^;]+);\n.*?(?:(?=^package)|\Z))/msg
27             );
28 4         19 $_ .= "\n1;\n" for values %modules;
29 4         14 @Modules{keys %modules} = values %modules;
30 4         14 delete $Not_Loaded_Yet{$key};
31             }
32 7     0   33 log_trace { "done flushing loaded classes" };
  0         0  
33             }
34              
35             sub find_module {
36 7     7 0 28 flush_loaded;
37 7         60 my ($module) = @_;
38 7         36 $module =~ s/\//::/g;
39 7         46 $module =~ s/\.pm$//;
40 7         36 return $Modules{$module};
41             }
42              
43             1;