Any-Template-ProcessDir

 view release on metacpan or  search on metacpan

lib/Any/Template/ProcessDir.pm  view on Meta::CPAN

package Any::Template::ProcessDir;
use 5.006;
use File::Basename;
use File::Find::Wanted;
use File::Path qw(make_path remove_tree);
use File::Slurp qw(read_file write_file);
use File::Spec::Functions qw(catfile catdir);
use Moose;
use Moose::Util::TypeConstraints;
use Try::Tiny;
use strict;
use warnings;
our $VERSION = '0.08'; #VERSION

has 'dest_dir'             => ( is => 'ro' );
has 'dir'                  => ( is => 'ro' );
has 'dir_create_mode'      => ( is => 'ro', isa => 'Int', default => oct(775) );
has 'file_create_mode'     => ( is => 'ro', isa => 'Int', default => oct(444) );
has 'ignore_files'         => ( is => 'ro', isa => 'CodeRef', default => sub { sub { 0 } } );
has 'process_file'         => ( is => 'ro', isa => 'CodeRef', lazy_build => 1 );
has 'process_text'         => ( is => 'ro', isa => 'CodeRef', lazy_build => 1 );
has 'readme_filename'      => ( is => 'ro', default => 'README' );
has 'same_dir'             => ( is => 'ro', init_arg => undef );
has 'source_dir'           => ( is => 'ro' );
has 'template_file_regex'  => ( is => 'ro', lazy_build => 1 );
has 'template_file_suffix' => ( is => 'ro', default => '.src' );

sub BUILD {
    my ( $self, $params ) = @_;

    die "you must pass one of dir and source_dir/dest_dir"
      if (
        defined( $self->dir ) ==
        ( defined( $self->source_dir ) && defined( $self->dest_dir ) ) );
    if ( defined( $self->dir ) ) {
        $self->{same_dir} = 1;
        $self->{source_dir} = $self->{dest_dir} = $self->dir;
    }
}

sub _build_template_file_regex {
    my $self                 = shift;
    my $template_file_suffix = $self->template_file_suffix;
    return
      defined($template_file_suffix) ? qr/\Q$template_file_suffix\E$/ : qr/.|/;
}

sub process_dir {
    my ($self) = @_;

    my $source_dir = $self->source_dir;
    my $dest_dir   = $self->dest_dir;

    if ( !$self->same_dir ) {
        remove_tree($dest_dir);
        die "could not remove '$dest_dir'" if -d $dest_dir;
    }

    my $ignore_files = $self->ignore_files;
    my @source_files =
      find_wanted( sub { -f && !$ignore_files->($File::Find::name) },
        $source_dir );
    my $template_file_suffix = $self->template_file_suffix;

    foreach my $source_file (@source_files) {
        $self->generate_dest_file($source_file);
    }

    if ( !$self->same_dir ) {
        $self->generate_readme();



( run in 1.233 second using v1.01-cache-2.11-cpan-f56aa216473 )