File Coverage

blib/lib/Script/State.pm
Criterion Covered Total %
statement 19 43 44.1
branch 0 12 0.0
condition 1 6 16.6
subroutine 7 9 77.7
pod 2 2 100.0
total 29 72 40.2


line stmt bran cond sub pod time code
1             package Script::State;
2 1     1   5 use strict;
  1         2  
  1         39  
3 1     1   6 use warnings;
  1         3  
  1         37  
4 1     1   2933 use PadWalker qw(var_name);
  1         3603  
  1         108  
5 1     1   1145 use Data::Dumper;
  1         8550  
  1         536  
6              
7             our $VERSION = '0.03';
8              
9             our $DATAFILE;
10             our $SCRIPT_DATA;
11             our $VAR_REF;
12              
13             sub script_state {
14 0 0   0 1 0 my $name = var_name 1, \$_[0] or do {
15 0         0 require Carp;
16 0         0 Carp::croak('Invalid variable passed');
17             };
18 0         0 $VAR_REF->{$name} = \$_[0];
19              
20 0 0       0 if (exists $SCRIPT_DATA->{$name}) {
    0          
21 0         0 $_[0] = $SCRIPT_DATA->{$name};
22             } elsif ($#_ >= 1) {
23 0         0 $_[0] = $_[1];
24             }
25             }
26              
27             sub store {
28 1 0 33 1 1 16 if ($DATAFILE && $VAR_REF) {
29 0 0         open my $fh, '>', $DATAFILE or do {
30 0           warn "Could not open $DATAFILE: $!";
31 0           return;
32             };
33              
34 0           my $vars = { map { $_ => ${ $VAR_REF->{$_} } } keys %$VAR_REF };
  0            
  0            
35 0           print $fh Data::Dumper->new([ $vars ])->Varname('VAR')->Terse(0)->Indent(1)->Purity(1)->Dump;
36 0           close $fh;
37              
38 0           return 1;
39             }
40             }
41              
42             sub import {
43 0     0     my ($class, %args) = @_;
44              
45 0   0       $DATAFILE = delete $args{-datafile} || do {
46             require File::Spec;
47             my ($vol, $dirs, $file) = File::Spec->splitpath($0);
48             File::Spec->catpath($vol, $dirs, ".$file.pl");
49             };
50              
51 1 0   1   13 $SCRIPT_DATA = -r $DATAFILE ? do { do $DATAFILE; no strict 'vars'; $VAR1 } : {}; ## no critic
  1         29  
  1         61  
  0            
  0            
  0            
52              
53 0           my $pkg = caller;
54 1     1   6 no strict 'refs';
  1         1  
  1         114  
55 0           *{ "$pkg\::script_state" } = \&script_state;
  0            
56             }
57              
58             END {
59             __PACKAGE__->store;
60             }
61              
62             1;
63              
64             __END__