File Coverage

lib/App/PRT/Command/AddUse.pm
Criterion Covered Total %
statement 33 33 100.0
branch 8 10 80.0
condition 1 3 33.3
subroutine 7 7 100.0
pod 0 4 0.0
total 49 57 85.9


line stmt bran cond sub pod time code
1             package App::PRT::Command::AddUse;
2 2     2   1177 use strict;
  2         3  
  2         42  
3 2     2   6 use warnings;
  2         2  
  2         35  
4 2     2   438 use PPI;
  2         85453  
  2         393  
5              
6             # Internal command to add use statement to file
7              
8             sub new {
9 23     23 0 7205 my ($class) = @_;
10 23         77 bless {
11             namespace => undef,
12             }, $class;
13             }
14              
15             # register a method
16             # arguments:
17             # $namespace: package name to use
18             sub register {
19 22     22 0 39 my ($self, $namespace) = @_;
20              
21 22         55 $self->{namespace} = $namespace;
22             }
23              
24             sub namespace {
25 68     68 0 585 my ($self) = @_;
26              
27 68         195 $self->{namespace};
28             }
29              
30             # refactor a file
31             # argumensts:
32             # $file: filename for refactoring
33             sub execute {
34 22     22 0 4183 my ($self, $file) = @_;
35              
36 22         87 my $document = PPI::Document->new($file);
37 22 50       83229 return unless $document;
38              
39 22         38 my $used = 0;
40 22         25 my $last_use;
41 22         68 my $include_statements = $document->find('PPI::Statement::Include');
42              
43 22 100       28040 if ($include_statements) {
44 17         45 for my $statement (@$include_statements) {
45 49 50       121 next unless defined $statement->module;
46 49 100       731 if ($statement->module eq $self->namespace) {
47 5         8 $used++;
48             }
49 49         59 $last_use = $statement;
50             }
51             }
52 22 100       72 return if $used;
53              
54 17   33     66 my $insert_to = $last_use || $document->find_first('PPI::Statement::Package') || $document->find_first('PPI::Statement');
55              
56 17         718 my $tokens_to_insert = PPI::Document->new(\"\nuse @{[ $self->namespace ]};");
  17         30  
57 17         9012 $insert_to->add_element($tokens_to_insert);
58 17         260 $document->save($file);
59             }
60              
61             1;