Hi,
Ruby 2.4 introduced Pathname#empty?
which delegates to File#empty?
and Dir#empty?
.
This caused a surprise in our code base, where we have this guard clause:
def initialize(storage_path)
raise ArgumentError, “no storage path configured” unless storage_path.present?
…
end
where storage_path
points to a directory and is constructed via Rails.root.join("data/foo/bar").tap(&:mkpath)
.
We’ve changed the guard to if storage_path.nil?
as a workaround, but I still find it surprising that an existing path on disk is not #present?
.
foo = Pathname.new(“/tmp”).join(SecureRandom.uuid)
foo.exist? #=> false
foo.present? #=> false
foo.mkpath
foo.exist? #=> true
foo.present? #=> false
Now, I don’t know how strict the negation of Object#present?
(i.e. == !blank?
) is intended be, or else I’d have opened an issue/PR on GitHub and asked for another core extension, in the likes of
if Pathname.instance_methods.include?(:empty?)
class Pathname
alias present? exist?
end
end
but that would lead to an instance beeing simultaneously #blank?
and #present?
(considering an #empty?
directory ought to be #blank?
).
So… what do you think?