File Coverage

lib/Pod/Html/HtmlTree.pm
Criterion Covered Total %
statement 84 96 87.5
branch 9 10 90.0
condition 8 10 80.0
subroutine 17 19 89.4
pod 0 8 0.0
total 118 143 82.5


line stmt bran cond sub pod time code
1             package Pod::Html::HtmlTree;
2              
3 1     1   12074 use strict;
  1         3  
  1         33  
4 1     1   949 use Pod::Html;
  1         280394  
  1         73  
5 1     1   10 use File::Find;
  1         8  
  1         189  
6 1     1   4 use File::Path;
  1         2  
  1         154  
7 1     1   5 use File::Basename;
  1         1  
  1         61  
8 1     1   6 use List::Util qw/first/;
  1         1  
  1         89  
9 1     1   2938 use Data::Dumper;
  1         8352  
  1         1160  
10             our $VERSION = 0.92;
11              
12             sub new {
13 4     4 0 5494 my $class = shift;
14 4   100     33 my $self = shift || {};
15            
16             # default setting.
17 4         22 $self->{pod_exts} = [ 'pm' ,'pl' ,'cgi','pod' ];
18 4         10 $self->{mask_dir} = 0775;
19 4         9 $self->{mask_html} = 0664;
20              
21 4         10 bless $self , $class;
22 4         11 return $self;
23             }
24              
25             sub create {
26 4     4 0 27 my $self = shift;
27              
28 4         22 my $paths_ref = $self->_get_paths();
29 4         18 my $umask = umask 0000;
30              
31 4         7 for my $file_ref ( @{ $paths_ref } ) {
  4         9  
32 3 100       235 if ( !-d dirname( $file_ref->{outfile} ) ) {
33 2         964 mkpath( dirname( $file_ref->{outfile} ) , 0 , $self->{mask_dir} ) ;
34             }
35 3   100     34 $self->{args} = $self->{args} || [];
36 3         5 my @args = @{ $self->{args} } ;
  3         11  
37 3         11 push ( @args , '--infile=' . $file_ref->{infile} );
38 3         8 push ( @args , '--outfile=' . $file_ref->{outfile} );
39            
40 3         27 pod2html( @args );
41 2         55917 chmod $self->{mask_html} , $file_ref->{outfile} ;
42             }
43 3         144 unlink './pod2htmd.tmp';
44 3         25 unlink './pod2htmi.tmp';
45              
46 3         14 umask $umask;
47 3         30 return $paths_ref;
48             }
49              
50             sub args {
51 1     1 0 31 my $self = shift;
52 1         2 my $arg = shift;
53              
54 1         3 $self->{args} = [];
55            
56 1         3 foreach my $key ( keys %{ $arg } ) {
  1         8  
57 14 100       43 my $value = $arg->{$key} eq '0' ? "--$key" : "--$key=$arg->{$key}" ;
58 14         12 push @{ $self->{args} } , $value ;
  14         28  
59             }
60             }
61              
62             #{{{ setter
63             sub pod_exts {
64 2     2 0 34 my $self = shift;
65 2         6 $self->{pod_exts} = shift;
66             }
67             sub mask_dir {
68 0     0 0 0 my $self = shift;
69 0         0 $self->{mask_dir} = shift;
70             }
71              
72             sub mask_html {
73 0     0 0 0 my $self = shift;
74 0         0 $self->{mask_html} = shift;
75             }
76              
77             sub indir {
78 1     1 0 8 my $self = shift;
79 1         7 $self->{indir} = shift;
80             }
81              
82             sub outdir {
83 1     1 0 5 my $self = shift;
84 1         4 $self->{outdir} = shift;
85             }
86              
87             #}}}
88              
89             #{{{ PRIVATE
90             sub _get_paths {
91 4     4   9 my $self = shift;
92 4         9 my @infiles = ();
93 4         9 my @paths = ();
94             File::Find::find(
95             sub {
96 16     16   28 my $file_name = $_;
97 16 100 100     1217 if (!-d $_ && $self->_is_ok_ext( $file_name ) ) {
98 3         110 push @infiles , $File::Find::name ;
99             }
100             },
101 4         788 $self->{indir}
102             );
103              
104             # set { outfile , infile } in array
105 4         24 for my $infile ( @infiles ) {
106             # get ext
107 3         17 my @splited_file_by_dot = split /\./ , $infile ;
108 3         9 my $ext = $splited_file_by_dot[-1];
109              
110             # get outfile
111 3         5 my $outfile = $infile;
112 3         27 my $os = fileparse_set_fstype();
113 3 50 33     22 if( $os eq 'MSWin32' || $os eq 'DOS' ) {
114 0         0 my $indir = $self->{indir};
115 0         0 my $outdir = $self->{outdir};
116 0         0 $outfile =~ s/\\/\//g;
117 0         0 $indir =~ s/\\/\//g;
118 0         0 $outdir =~ s/\\/\//g;
119 0         0 $outfile =~ s/$indir/$outdir/;
120 0         0 $outfile =~ s/\.$ext/\.html/;
121 0         0 $outfile =~ s/\//\\/g;
122             }
123             else {
124 3         33 $outfile =~ s/$self->{indir}/$self->{outdir}/;
125 3         33 $outfile =~ s/\.$ext/\.html/;
126             }
127            
128             # make file hash
129 3         14 my $file_ref = {
130             infile => $infile ,
131             outfile => $outfile ,
132             };
133 3         32 push @paths , $file_ref ;
134             };
135            
136 4         15 return \@paths;
137             }
138              
139             sub _is_ok_ext {
140 4     4   8 my $self = shift;
141 4         7 my $file_name = shift;
142            
143 4     5   19 my $find = first { $file_name =~ /\.$_$/} @{ $self->{pod_exts} };
  5         89  
  4         30  
144 4 100       72 return $find ? 1 : 0 ;
145             }
146             #}}}
147             1;
148              
149              
150             __END__