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   241064 use strictures 1;
  4         33  
  4         179  
4 4     4   1438 use Object::Remote;
  4         9  
  4         141  
5 4     4   21 use Object::Remote::Logging qw ( :log );
  4         6  
  4         24  
6              
7             our %Modules;
8             our %Not_Loaded_Yet;
9             our %Seen;
10              
11             sub import {
12 4     4   44 my $target = caller;
13 4     0   29 log_trace { "import has been invoked by '$target' on " . __PACKAGE__ };
  0         0  
14 4 50       53 return if $Seen{$target};
15 4     0   94 log_debug { "'$target' has not yet loaded " . __PACKAGE__ };
  0         0  
16 4         132601 $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   52  
21 7         133 foreach my $key (keys %Not_Loaded_Yet) {
22 4     0   50 log_trace { "flushing '$key'" };
  0         0  
23 4     4   26 my $data_fh = do { no strict 'refs'; *{"${key}::DATA"} };
  4         7  
  4         1442  
  4         53  
  4         12  
  4         41  
24 4         12 my $data = do { local $/; <$data_fh> };
  4         23  
  4         160  
25 4         117 my %modules = reverse(
26             $data =~ m/(^package ([^;]+);\n.*?(?:(?=^package)|\Z))/msg
27             );
28 4         27 $_ .= "\n1;\n" for values %modules;
29 4         21 @Modules{keys %modules} = values %modules;
30 4         22 delete $Not_Loaded_Yet{$key};
31             }
32 7     0   44 log_trace { "done flushing loaded classes" };
  0         0  
33             }
34              
35             sub find_module {
36 7     7 0 33 flush_loaded;
37 7         113 my ($module) = @_;
38 7         37 $module =~ s/\//::/g;
39 7         39 $module =~ s/\.pm$//;
40 7         50 return $Modules{$module};
41             }
42              
43             1;