Connector
view release on metacpan or search on metacpan
lib/Connector/Builtin/File/Path.pm view on Meta::CPAN
return -r $filename;
}
# return the content of the file
sub set {
my $self = shift;
my $file = shift;
my $data = shift;
my $filename = $self->_sanitize_path( $file, $data );
my $content;
if ($self->content()) {
$self->log()->debug('Process template for content ' . $self->content());
my $template = Template->new({});
$data = { DATA => $data } if (ref $data eq '');
$template->process( \$self->content(), $data, \$content) || die "Error processing content template.";
} else {
if (ref $data ne '') {
die "You need to define a content template if data is not a scalar";
}
$content = $data;
}
my $mode = $self->ifexists();
if ($mode eq 'fail' && -f $filename) {
die "File $filename exists";
}
if ($mode eq 'silent' && -f $filename) {
return;
}
my $uid = -1;
my $gid;
if (my $user = $self->user()) {
$uid = getpwnam($user) or die "$user not known";
$gid = -1;
}
if (my $group = $self->group()) {
$gid = getgrnam($group) or die "$group not known";
}
if ($mode eq 'append' && -f $filename) {
open (FILE, ">>",$filename) || die "Unable to open file for appending";
} else {
open (FILE, ">", $filename) || die "Unable to open file for writing";
}
print FILE $content;
close FILE;
if (my $filemode = $self->mode()) {
if ($filemode =~ m{\A[0-7]{4}\z}) {
chmod (oct($filemode), $filename) || die "Unable to change mode to $filemode";
} else {
die "Given mode string '$filemode' is not valid";
}
}
if ($gid) {
chown ($uid, $gid, $filename) || die "Unable to chown $filename to $uid/$gid";
}
#FIXME - some error handling might not hurt
return 1;
}
sub _sanitize_path {
my $self = shift;
my $inargs = shift;
my $data = shift;
my @args = $self->_build_path_with_prefix( $inargs );
my $file = $self->_render_local_path( \@args, $data );
my $filename = $self->{LOCATION}.'/'.$file;
$self->log()->debug('Filename evaluated to ' . $filename);
return $filename;
}
no Moose;
__PACKAGE__->meta->make_immutable;
1;
__END__
=head1 Name
Connector::Builtin::File::Path
=head1 Description
Highly configurable file writer/reader.
=head1 Parameters
=over
=item LOCATION
The base directory where the files are located. This parameter is mandatory.
=item file/path
Pattern for Template Toolkit to build the filename.
The path components are available in the key ARGS. In set mode the unfiltered
data is available in key DATA.
( run in 0.786 second using v1.01-cache-2.11-cpan-cdf2f3d4e48 )