Blame t/lib/File/Find/Object/TreeCreate.pm

Packit 26bf30
package File::Find::Object::TreeCreate;
Packit 26bf30
Packit 26bf30
use strict;
Packit 26bf30
use warnings;
Packit 26bf30
Packit 26bf30
use File::Spec;
Packit 26bf30
Packit 26bf30
sub new
Packit 26bf30
{
Packit 26bf30
    my $class = shift;
Packit 26bf30
    my $self = {};
Packit 26bf30
    bless $self, $class;
Packit 26bf30
    $self->_initialize(@_);
Packit 26bf30
    return $self;
Packit 26bf30
}
Packit 26bf30
Packit 26bf30
sub _initialize
Packit 26bf30
{
Packit 26bf30
}
Packit 26bf30
Packit 26bf30
sub get_path
Packit 26bf30
{
Packit 26bf30
    my $self = shift;
Packit 26bf30
    my $path = shift;
Packit 26bf30
Packit 26bf30
    my @components;
Packit 26bf30
Packit 26bf30
    if ($path =~ s{^\./}{})
Packit 26bf30
    {
Packit 26bf30
        push @components, File::Spec->curdir();
Packit 26bf30
    }
Packit 26bf30
Packit 26bf30
    my $is_dir = ($path =~ s{/$}{});
Packit 26bf30
    push @components, split(/\//, $path);
Packit 26bf30
    if ($is_dir)
Packit 26bf30
    {
Packit 26bf30
        return File::Spec->catdir(@components);
Packit 26bf30
    }
Packit 26bf30
    else
Packit 26bf30
    {
Packit 26bf30
        return File::Spec->catfile(@components);
Packit 26bf30
    }
Packit 26bf30
}
Packit 26bf30
Packit 26bf30
sub exist
Packit 26bf30
{
Packit 26bf30
    my $self = shift;
Packit 26bf30
    return (-e $self->get_path(@_));
Packit 26bf30
}
Packit 26bf30
Packit 26bf30
sub is_file
Packit 26bf30
{
Packit 26bf30
    my $self = shift;
Packit 26bf30
    return (-f $self->get_path(@_));
Packit 26bf30
}
Packit 26bf30
Packit 26bf30
sub is_dir
Packit 26bf30
{
Packit 26bf30
    my $self = shift;
Packit 26bf30
    return (-d $self->get_path(@_));
Packit 26bf30
}
Packit 26bf30
Packit 26bf30
sub cat
Packit 26bf30
{
Packit 26bf30
    my $self = shift;
Packit 26bf30
    open my $in, "<", $self->get_path(@_) or
Packit 26bf30
        return 0;
Packit 26bf30
    my $data;
Packit 26bf30
    {
Packit 26bf30
        local $/;
Packit 26bf30
        $data = <$in>;
Packit 26bf30
    }
Packit 26bf30
    close($in);
Packit 26bf30
    return $data;
Packit 26bf30
}
Packit 26bf30
Packit 26bf30
sub ls
Packit 26bf30
{
Packit 26bf30
    my $self = shift;
Packit 26bf30
    opendir my $dir, $self->get_path(@_) or
Packit 26bf30
        return undef;
Packit 26bf30
    my @files =
Packit 26bf30
        sort { $a cmp $b }
Packit 26bf30
        grep { !(($_ eq ".") || ($_ eq "..")) }
Packit 26bf30
        readdir($dir);
Packit 26bf30
    closedir($dir);
Packit 26bf30
    return \@files;
Packit 26bf30
}
Packit 26bf30
Packit 26bf30
sub create_tree
Packit 26bf30
{
Packit 26bf30
    my ($self, $unix_init_path, $tree) = @_;
Packit 26bf30
    my $real_init_path = $self->get_path($unix_init_path);
Packit 26bf30
    return $self->_real_create_tree($real_init_path, $tree);
Packit 26bf30
}
Packit 26bf30
Packit 26bf30
sub _real_create_tree
Packit 26bf30
{
Packit 26bf30
    my ($self, $init_path, $tree) = @_;
Packit 26bf30
    my $name = $tree->{'name'};
Packit 26bf30
    if ($name =~ s{/$}{})
Packit 26bf30
    {
Packit 26bf30
        my $dir_name = File::Spec->catfile($init_path, $name);
Packit 26bf30
        mkdir($dir_name);
Packit 26bf30
        if (exists($tree->{'subs'}))
Packit 26bf30
        {
Packit 26bf30
            foreach my $sub (@{$tree->{'subs'}})
Packit 26bf30
            {
Packit 26bf30
                $self->_real_create_tree($dir_name, $sub);
Packit 26bf30
            }
Packit 26bf30
        }
Packit 26bf30
    }
Packit 26bf30
    else
Packit 26bf30
    {
Packit 26bf30
        open my $out, ">", File::Spec->catfile($init_path, $name);
Packit 26bf30
        print {$out} +(exists($tree->{'contents'}) ? $tree->{'contents'} : "");
Packit 26bf30
        close($out);
Packit 26bf30
    }
Packit 26bf30
    return 0;
Packit 26bf30
}
Packit 26bf30
1;
Packit 26bf30