package Template::Coverable::Provider; use strict; use base qw/Template::Provider/; use Template::Coverable::Document; use File::Spec; sub _init { my $self = shift; $_[0] ||= {}; $_[0]->{COMPILE_DIR} = File::Spec->catdir( $Devel::Cover::TT::TMPDIR, $Devel::Cover::TT::MODDIR ); $_[0]->{COMPILE_EXT} = '.pm'; $_[0]->{CACHE_SIZE} = 0; $_[0]->{DOCUMENT} = 'Template::Coverable::Document'; $_[0]->{INCLUDE_PATH} ||= []; $_[0]->{INCLUDE_PATH} = [ $_[0]->{INCLUDE_PATH} ] unless ref($_[0]->{INCLUDE_PATH}) eq 'ARRAY'; push @{ $_[0]->{INCLUDE_PATH} }, $Devel::Cover::TT::TMPDIR; return $self->SUPER::_init(@_); } sub _compiled_filename { my $self = shift; my $s = $self->SUPER::_compiled_filename(@_); $s =~ s/\.(?!pm$)/___/g; return $s; } sub _load_compiled { my ($self, $file) = @_; my $compiled; # load compiled template via require(); we zap any # %INC entry to ensure it is reloaded (we don't # want 1 returned by require() to say it's in memory) my $pkg = Devel::Cover::TT::file2pkg($file); my $pkgf = "$pkg.pm"; $pkgf =~ s#::#/#g; delete $INC{ $pkgf }; eval "use $pkg;" . q{ $compiled = $pkg->getDocument(); }; return $@ ? $self->error("compiled template $compiled: $@") : $compiled; } 1;