From fd3a74f6d6f3edddd292b7ef2acdf475a92f0b52 Mon Sep 17 00:00:00 2001 From: Moises Macia Date: Wed, 26 Aug 2026 21:44:56 +0000 Subject: [PATCH] TempFile module to handle random file names --- lib/feed_reader/collector.ex | 3 +-- lib/feed_reader/downloader.ex | 6 +----- lib/feed_reader/temp_file.ex | 11 +++++++++++ 3 files changed, 13 insertions(+), 7 deletions(-) create mode 100644 lib/feed_reader/temp_file.ex diff --git a/lib/feed_reader/collector.ex b/lib/feed_reader/collector.ex index f66bdd6..9c751ed 100644 --- a/lib/feed_reader/collector.ex +++ b/lib/feed_reader/collector.ex @@ -123,8 +123,7 @@ defmodule FeedReader.Collector do do: {:ok, %ParseResult{feed: feed, items: Enum.reverse(items)}} defp temporary_path do - path = - Path.join(System.tmp_dir!(), "feed_reader-parse-#{System.unique_integer([:positive])}.xml") + path = FeedReader.TempFile.random_file("feed_reader-parse") case File.open(path, [:write, :binary, :exclusive]) do {:ok, file} -> diff --git a/lib/feed_reader/downloader.ex b/lib/feed_reader/downloader.ex index 877c2a8..5007b6d 100644 --- a/lib/feed_reader/downloader.ex +++ b/lib/feed_reader/downloader.ex @@ -233,11 +233,7 @@ defmodule FeedReader.Downloader do defp open_temp_file(0), do: {:error, :eexist} defp open_temp_file(attempts) do - path = - Path.join( - System.tmp_dir!(), - "feed_reader-download-#{System.unique_integer([:positive])}.xml" - ) + path = FeedReader.TempFile.random_file("feed_reader-download") case File.open(path, [:write, :binary, :exclusive]) do {:ok, file} -> {:ok, path, file} diff --git a/lib/feed_reader/temp_file.ex b/lib/feed_reader/temp_file.ex new file mode 100644 index 0000000..c482985 --- /dev/null +++ b/lib/feed_reader/temp_file.ex @@ -0,0 +1,11 @@ +defmodule FeedReader.TempFile do + @moduledoc false + + @spec random_file(String.t()) :: String.t() + def random_file(base_name \\ "feed_reader") do + filename = + "#{base_name}-#{:crypto.strong_rand_bytes(16) |> Base.encode16(case: :lower)}.xml" + + Path.join(System.tmp_dir!(), filename) + end +end