一部のプラットフォーム (Windows) では、File.symlinkが Ruby でサポートされていないため、NotImplemented例外が発生します。シンボリックリンクの有無にかかわらず動作するコードがいくつかあるので、適応させる必要があります。
シンボリックリンクがサポートされているかどうかを確認するために私が思いついた唯一の方法は、シンボリックリンクを作成することです:
def symlink_supported?
Dir.mktmpdir do |dir|
target_path = File.join(dir, 'target')
symlink_path = File.join(dir, 'symlink')
FileUtils.touch target_path
begin
FileUtils.ln_s target_path, symlink_path
true
rescue NotImplementedError
false
end
end
end
これは遅く (大量のファイル システム操作!)、扱いにくいようです。遅いことはメモ化によって処理できますが、それはすでに不格好な方法にさらに機械を追加するだけです。
File.symlinkがサポートされているかどうかを確認するためのより高速で洗練された方法はありますか?