Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/kentnl/file-tempdir-forpackage
Easy temporary directories associated with packages
https://github.com/kentnl/file-tempdir-forpackage
Last synced: 4 days ago
JSON representation
Easy temporary directories associated with packages
- Host: GitHub
- URL: https://github.com/kentnl/file-tempdir-forpackage
- Owner: kentnl
- License: other
- Created: 2012-07-26T12:51:13.000Z (over 12 years ago)
- Default Branch: master
- Last Pushed: 2017-03-10T11:36:59.000Z (over 7 years ago)
- Last Synced: 2024-06-21T00:18:44.438Z (5 months ago)
- Language: Perl
- Size: 170 KB
- Stars: 2
- Watchers: 2
- Forks: 1
- Open Issues: 0
-
Metadata Files:
- Readme: README.mkdn
- Changelog: Changes
- License: LICENSE
Awesome Lists containing this project
README
# NAME
File::Tempdir::ForPackage - Easy temporary directories associated with packages.
# VERSION
version 1.000003
# DESCRIPTION
This is mostly an interface wrapper for `File::Temp::tempdir`, stealing code from `File::Tempdir`;
- I constantly forget how `File::Tempdir` works
- I often want a `tempdir` with the name of the package working with it enshrined in the path
- I constantly forget the magic glue syntax to get a folder inside a system `tempdir` with a custom prefix and a user defined length of random characters.And this is designed to solve this simply.
use File::TempDir::ForPackage;
my $tempdir = File::TempDir::ForPackage->new( package => __PACKAGE__ , use_version => 1 );
my $dir = $tempdir->dir();do shit in \`$dir\`
$dir on Linux will be something like /tmp/perl-Some-Package-maybewith-a-VERSION-AFG14561/
so if it crashes and leaves a `tempdir` behind, you will know who left that `tempdir` behind and have a way of cleaning it up.When `$tempdir` is destroyed, `$dir` will be cleaned;
Additionally:
$dir->run_once_in(sub{
...
});Is there for people who don't trust scope auto-cleansing and want to know when the directory is reaped.
Additionally, this code can be run in a tight loop creating and destroying lots of similarly named temporary directories without risk of conflict.
for my $i ( 0 .. 30 ) {
$dir->run_once_in(sub {
system 'find $PWD';
});
}This emits something like:
/tmp/perl-File-Tempdir-ForPackage-versionundef-1343303496-408662-PzH4BD
/tmp/perl-File-Tempdir-ForPackage-versionundef-1343303496-408662-5h8nkG
/tmp/perl-File-Tempdir-ForPackage-versionundef-1343303496-408662-UXKt4S
/tmp/perl-File-Tempdir-ForPackage-versionundef-1343303496-408662-Lqg2aW
/tmp/perl-File-Tempdir-ForPackage-versionundef-1343303496-408662-DkNeq6
/tmp/perl-File-Tempdir-ForPackage-versionundef-1343303496-408662-jRI_zF
/tmp/perl-File-Tempdir-ForPackage-versionundef-1343303496-408662-j0_Gt1
/tmp/perl-File-Tempdir-ForPackage-versionundef-1343303496-408662-iX1ddT
/tmp/perl-File-Tempdir-ForPackage-versionundef-1343303496-408662-ZmvikK
/tmp/perl-File-Tempdir-ForPackage-versionundef-1343303496-408662-QNGOUF
/tmp/perl-File-Tempdir-ForPackage-versionundef-1343303496-408662-6wssvL
/tmp/perl-File-Tempdir-ForPackage-versionundef-1343303496-408662-ZmwZxl
/tmp/perl-File-Tempdir-ForPackage-versionundef-1343303496-408662-wIzRTs
/tmp/perl-File-Tempdir-ForPackage-versionundef-1343303496-408662-xetCym
/tmp/perl-File-Tempdir-ForPackage-versionundef-1343303496-408662-8Y0vyX
/tmp/perl-File-Tempdir-ForPackage-versionundef-1343303496-408662-Zlqt6X
/tmp/perl-File-Tempdir-ForPackage-versionundef-1343303496-408662-U5Z_Sa
/tmp/perl-File-Tempdir-ForPackage-versionundef-1343303496-408662-sKmow1
/tmp/perl-File-Tempdir-ForPackage-versionundef-1343303496-408662-rUND95
/tmp/perl-File-Tempdir-ForPackage-versionundef-1343303496-408662-XjPSGF
/tmp/perl-File-Tempdir-ForPackage-versionundef-1343303496-408662-ec8sZZ
/tmp/perl-File-Tempdir-ForPackage-versionundef-1343303496-408662-_4NBwX
/tmp/perl-File-Tempdir-ForPackage-versionundef-1343303496-408662-xM9i6l
/tmp/perl-File-Tempdir-ForPackage-versionundef-1343303496-408662-p3FhJf
/tmp/perl-File-Tempdir-ForPackage-versionundef-1343303496-408662-Zv0sso
/tmp/perl-File-Tempdir-ForPackage-versionundef-1343303496-408662-rP8cAi
/tmp/perl-File-Tempdir-ForPackage-versionundef-1343303496-408662-iade0x
/tmp/perl-File-Tempdir-ForPackage-versionundef-1343303497-408662-fsDDPy
/tmp/perl-File-Tempdir-ForPackage-versionundef-1343303497-408662-FeCcfZ
/tmp/perl-File-Tempdir-ForPackage-versionundef-1343303497-408662-ta5yfg
/tmp/perl-File-Tempdir-ForPackage-versionundef-1343303497-408662-rdcQhFExcept of course, with a package of your choosing, and possibly that packages version.
# METHODS
## `preserve`
Toggle the preservation of the `tempdir` after it goes out of scope or is otherwise indicated for cleaning.
$instance->preserve(); # tempdir is now preserved after cleanup
$instance->preserve(0); # tempdir is purged at cleanup
$instance->preserve(1); # tempdir is preserved after cleanupNote that in `run_once_in`, a new `tempdir` is created and set for this modules consumption for each run of `run_once_in`,
regardless of this setting. All this setting will do, when set, will prevent each instance being reaped from the file system.Thus:
$dir->preserve(1);
for( 1..10 ){
$dir->run_once_in(sub{});
}Will create 10 temporary directories on your file system and not reap them.
## `dir`
Return a path string to the created temporary directory
my $path = $instance->dir
## `run_once_in`
Vivifies a temporary directory for the scope of the passed sub.
$instance->run_once_in(sub{
# temporary directory is created before this code runs.
# Cwd::getcwd is now inside the temporary directory.
});# temporary directory is reset, and possibly reaped.
You can call this method repeatedly, and you'll get a separate temporary directory each time.
# ATTRIBUTES
## `package`
The package to report as being associated with.
This really can be any string, as its sanitized and then used as a path part.If not specified, will inspect `caller`
my $instance = CLASS->new(
package => 'Something::Here',
...
);Note: If you want `with_version` to work properly, specifying a valid package name will be helpful.
## `with_version`
Include the version from `package->VERSION()` in the `tempdir` path.
Defaults to false.
my $instance = CLASS->new(
...
with_version => 1,
);## `with_timestamp`
Include `time` in the `tempdir` path.
Defaults to false.
my $instance = CLASS->new(
...
with_timestamp => 1,
);## `with_pid`
Include `$$` in the `tempdir` path.
Defaults to false.
my $instance = CLASS->new(
...
with_pid => 1,
);## `num_random`
The number of characters of randomness to include in the `tempdir` template.
Defaults to 8. Must be no lower than 4.
my $instance = CLASS->new(
...
num_random => 5,
);# PRIVATE ATTRIBUTES
## `_preserve`
Internal `boolean` for tracking the \_preserve state.
## `_dir`
Internal `File::Tempdir` path.
# PRIVATE METHODS
## `_build__dir`
Builder method for \_dir which creates a temporary directory based on the passed parameters.
# PRIVATE FUNCTIONS
## `_clean_pkg`
Scrape garbage out of the 'package' field for use in file system tokens.
## `_clean_ver`
Scrape garbage out of versions for use in file system tokens.
# AUTHOR
Kent Fredric
# COPYRIGHT AND LICENSE
This software is copyright (c) 2017 by Kent Fredric .
This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.