From d1f20ad6944780397600461ae26dd456800e4504 Mon Sep 17 00:00:00 2001 From: Peter Vandenberk Date: Tue, 20 Sep 2022 08:53:39 +0100 Subject: [PATCH] Make `Dir.tmpdir` more idiomatic and functional Use `Enumerable#find` to iterate over the candidates, not `Enumerable.each`. (this makes the code more functional, and - IMO - slightly more idiomatic, as it avoids setting the "global" (by which I mean: non-local) `tmp` variable from inside the block) --- lib/tmpdir.rb | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/lib/tmpdir.rb b/lib/tmpdir.rb index 3b67164..1376e83 100644 --- a/lib/tmpdir.rb +++ b/lib/tmpdir.rb @@ -19,8 +19,7 @@ class Dir # Returns the operating system's temporary file path. def self.tmpdir - tmp = nil - ['TMPDIR', 'TMP', 'TEMP', ['system temporary path', @@systmpdir], ['/tmp']*2, ['.']*2].each do |name, dir = ENV[name]| + tmp = ['TMPDIR', 'TMP', 'TEMP', ['system temporary path', @@systmpdir], ['/tmp']*2, ['.']*2].find do |name, dir = ENV[name]| next if !dir dir = File.expand_path(dir) stat = File.stat(dir) rescue next @@ -32,8 +31,7 @@ def self.tmpdir when stat.world_writable? && !stat.sticky? warn "#{name} is world-writable: #{dir}" else - tmp = dir - break + break dir end end raise ArgumentError, "could not find a temporary directory" unless tmp