Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/danhper/elixir-temp
Temporary files and directories for Elixir
https://github.com/danhper/elixir-temp
Last synced: 7 days ago
JSON representation
Temporary files and directories for Elixir
- Host: GitHub
- URL: https://github.com/danhper/elixir-temp
- Owner: danhper
- License: mit
- Created: 2015-09-03T15:33:22.000Z (over 9 years ago)
- Default Branch: master
- Last Pushed: 2024-08-26T01:33:57.000Z (4 months ago)
- Last Synced: 2024-10-29T20:37:33.218Z (about 2 months ago)
- Language: Elixir
- Homepage: https://hex.pm/packages/temp
- Size: 57.6 KB
- Stars: 79
- Watchers: 6
- Forks: 25
- Open Issues: 2
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# elixir-temp
[![Elixir CI](https://github.com/danhper/elixir-temp/actions/workflows/ci.yml/badge.svg)](https://github.com/danhper/elixir-temp/actions/workflows/ci.yml)
[![Module Version](https://img.shields.io/hexpm/v/temp.svg)](https://hex.pm/packages/temp)
[![Hex Docs](https://img.shields.io/badge/hex-docs-lightgreen.svg)](https://hexdocs.pm/temp/)
[![Total Download](https://img.shields.io/hexpm/dt/temp.svg)](https://hex.pm/packages/temp)
[![License](https://img.shields.io/hexpm/l/temp.svg)](https://github.com/danhper/elixir-temp/blob/master/LICENSE)
[![Last Updated](https://img.shields.io/github/last-commit/danhper/elixir-temp.svg)](https://github.com/danhper/elixir-temp/commits/master)An Elixir module to easily create and use temporary files and directories.
The module is inspired by [node-temp](https://github.com/bruce/node-temp).## Installation
Add the dependency to your `mix.exs` deps:
```elixir
defp deps do
[{:temp, "~> 0.4"}]
end
```## Usage
### Getting a temporary path
```elixir
# just get a path
{:ok, tmp_path} = Temp.path
# with a prefix
{:ok, tmp_path} = Temp.path "my-prefix"
# with prefix and suffix
{:ok, tmp_path} = Temp.path %{prefix: "my-prefix", suffix: "my-suffix"}
# in a non-default tmp_dir
{:ok, tmp_path} = Temp.path %{prefix: "my-prefix", suffix: "my-suffix", basedir: "/my-tmp"}
# error on fail
tmp_path = Temp.path!
```### Using a temporary directory
Note that you can use all the options available for `Temp.path` as the first argument.
```elixir
# tmp dir
{:ok, dir_path} = Temp.mkdir "my-dir"
IO.puts dir_path
File.write Path.join(dir_path, "file_in_my_dir"), "some content"
# remove when done
File.rm_rf dir_path
```You can use the `Temp.mkdir!` if you prefer to have an error on failure.
### Using a temporary file
Note that you can use all the options available for `Temp.path` as the first argument.
```elixir
# tmp file
{:ok, fd, file_path} = Temp.open "my-file"
IO.puts file_path
IO.write fd, "some content"
File.close fd
# remove when done
File.rm file_path
```You can also pass a function to `open` and use the file descriptor in it. In this case, the file will be closed automatically.
```elixir
# tmp file
{:ok, file_path} = Temp.open "my-file", &IO.write(&1, "some content")
IO.puts file_path
IO.puts File.read!(file_path)
# remove when done
File.rm file_path
```### Tracking temporary files
By default, you have to cleanup the files by yourself, however, you can tell
`Temp` to track the temporary files automatically.
You just need to call `Temp.track` (or the bang version `Temp.track!`) and you are done.
Temporary files will be cleaned up automatically when the process exits.
You can also call `Temp.cleanup` if you want to clean them before the process exits.
Here is an example of how to use it:```elixir
Temp.track!dir_path = Temp.mkdir! "my-dir"
File.write Path.join(dir_path, "file_in_my_dir"), "some content"file_path = Temp.open! "my-file", &IO.write(&1, "some content")
IO.puts file_pathIO.puts inspect(Temp.tracked)
# cleanup
Temp.cleanupdir_path = Temp.mkdir
# this will be cleaned up on exit
```## License
This source code is licensed under the MIT License. Copyright (c) 2015, Daniel
Perez. All rights reserved.