File Coverage

blib/lib/App/Aphra/File.pm
Criterion Covered Total %
statement 20 54 37.0
branch 1 8 12.5
condition n/a
subroutine 7 12 58.3
pod 0 7 0.0
total 28 81 34.5


line stmt bran cond sub pod time code
1             package App::Aphra::File;
2              
3 3     3   17 use Moose;
  3         6  
  3         27  
4 3     3   18917 use Carp;
  3         8  
  3         159  
5 3     3   17 use File::Basename;
  3         7  
  3         185  
6 3     3   17 use File::Path 'make_path';
  3         6  
  3         112  
7 3     3   1047 use File::Copy;
  3         5542  
  3         1883  
8              
9             has [qw[path name extension ]] => (
10             isa => 'Str',
11             is => 'ro',
12             );
13              
14             has app => (
15             isa => 'App::Aphra',
16             is => 'ro',
17             );
18              
19             around BUILDARGS => sub {
20             my $orig = shift;
21             my $class = shift;
22             if (@_ == 1 and not ref $_[0]) {
23             croak;
24             }
25              
26             my %args = ref $_[0] ? %{$_[0]} : @_;
27              
28             croak "No app attribute\n" unless $args{app};
29             if ($args{filename}) {
30             debug("Got $args{filename}");
31             my @exts = values %{ $args{app}->config->{extensions}};
32             my ($name, $path, $ext) = fileparse($args{filename}, @exts);
33             chop($path) if $name;
34             chop($name) if $ext;
35             @args{qw[path name extension]} = ($path, $name, $ext);
36             }
37              
38             return $class->$orig(\%args);
39             };
40              
41             sub is_template {
42 2     2 0 4 my $self = shift;
43              
44 4         80 return scalar grep { $_ eq $self->extension }
45 2         3 values %{$self->app->config->{extensions}};
  2         52  
46             }
47              
48             sub destination_dir {
49 0     0 0 0 my $self = shift;
50              
51 0         0 my $dir = $self->path;
52              
53 0         0 my $src = $self->app->config->{source};
54 0         0 my $tgt = $self->app->config->{target};
55              
56 0         0 $dir =~ s/^$src/$tgt/;
57              
58 0         0 return $dir;
59             }
60              
61             sub template_name {
62 0     0 0 0 my $self = shift;
63              
64 0         0 my $src = $self->app->config->{source};
65 0         0 my $template_name = $self->full_name;
66 0         0 $template_name =~ s|^$src/||;
67              
68 0         0 return $template_name;
69             }
70              
71             sub output_name {
72 0     0 0 0 my $self = shift;
73              
74 0         0 my $output = $self->template_name;
75 0         0 my $ext = '\.' . $self->extension;
76 0         0 $output =~ s/$ext$//;
77              
78 0         0 return $output;
79             }
80              
81             sub full_name {
82 0     0 0 0 my $self = shift;
83              
84 0         0 my $full_name = $self->path . '/' . $self->name;
85 0 0       0 $full_name .= '.' . $self->extension if $self->extension;
86 0         0 return $full_name;
87             }
88              
89             sub process {
90 0     0 0 0 my $self = shift;
91              
92 0         0 debug('File is: ', $self->full_name);
93              
94 0         0 my $dest = $self->destination_dir;
95 0         0 debug("Dest: $dest");
96              
97 0         0 make_path $dest;
98              
99 0 0       0 if ($self->is_template) {
100 0         0 debug("It's a template");
101              
102 0         0 my $template = $self->template_name;
103 0         0 my $out = $self->output_name;
104              
105 0         0 debug("tt: $template -> $out");
106 0 0       0 $self->app->template->process($template, {}, $out)
107             or croak $self->app->template->error;
108             } else {
109 0         0 my $file = $self->full_name;
110 0         0 debug("Copy: $file -> ", $self->destination_dir);
111 0         0 copy $file, $self->destination_dir;
112             }
113             }
114              
115             sub debug {
116 1 50   1 0 4 carp @_ if $ENV{APHRA_DEBUG};
117             }
118              
119             1;