Workaround für File.exists? und Dir.exists? in Ruby 3.2
Wenn Sie auf Ruby 3.2 aktualisieren, sehen Sie vielleicht diesen Fehler:
irb(main):001:0> File.exists?
(irb):1:in `<main>': undefined method `exists?' for File:Class (NoMethodError)
Did you mean? exist?
from C:/Ruby32-x64/lib/ruby/gems/3.2.0/gems/irb-1.6.2/exe/irb:11:in `<top (required)>'
from C:/Ruby32-x64/bin/irb:25:in `load'
from C:/Ruby32-x64/bin/irb:25:in `<main>'
Oder jenen für Dir.exists?
(irb):3:in `<main>': undefined method `exists?' for Dir:Class (NoMethodError)
Did you mean? exist?
from C:/Ruby32-x64/lib/ruby/gems/3.2.0/gems/irb-1.6.2/exe/irb:11:in `<top (required)>'
from C:/Ruby32-x64/bin/irb:25:in `load'
from C:/Ruby32-x64/bin/irb:25:in `<main>'
Am besten verwenden Sie einfach File.exist? und Dir.exist? statt File.exists? und Dir.exists?,
denn diese sind spätestens seit Ruby 2.3 veraltet und wurden in Ruby 3.2 entfernt.
Oft wurden diese Methoden in Gems verwendet, die sich nicht einfach aktualisieren lassen. Zum Glück nutzen wir Ruby, und so gibt es einen einfachen Workaround, den ich in ein Gem gepackt habe.
So funktioniert der Monkeypatch:
class File
def self.exists?(filename)
self.exist?(filename)
end
end
Das muss vor jedem Code laufen, der die Methode File.exists verwendet.
Um es einfacher zu machen, habe ich es ins Gem file_exists gepackt.
Einfach
gem install file_exists
und mit
require 'file_exists'
vor allem anderen Code einbinden.