Contournement pour File.exists? et Dir.exists? sous Ruby 3.2
En passant à Ruby 3.2, vous verrez peut-être cette erreur :
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>'
Ou celle pour 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>'
Le mieux est simplement d’utiliser File.exist? et Dir.exist? au lieu de File.exists? et Dir.exists?,
car ces dernières sont dépréciées depuis au moins Ruby 2.3 et ont été supprimées dans Ruby 3.2.
Souvent, ces méthodes étaient utilisées dans des gems qu’on ne peut pas facilement mettre à jour. Heureusement, nous utilisons Ruby, et il existe un contournement simple, que j’ai mis dans une gem.
Comment faire le monkeypatch :
class File
def self.exists?(filename)
self.exist?(filename)
end
end
Ce code doit s’exécuter avant tout code qui utilise la méthode File.exists.
Pour simplifier, je l’ai empaqueté dans la gem file_exists.
Il suffit de faire
gem install file_exists
et de l’inclure avec
require 'file_exists'
avant tout le reste du code.