RubyのTempfileの使い方、newとcreate

困ってたこと

下のコードでTempfileを作ろうとしていた

readメソッドで読むと'bar'という文字列が入っていて欲しかったがファイルの中を見ると空になっていた

file = Temfile.new('foo') do |f|
    f <<  'bar'
end

file
# => #<File:/var/folders//foo20191210-a8gjzw>

file.read
# => ''

fileは存在しているが中身が入ってないっぽい

解決策

そもそもFileの扱い方をわかってなかった

newはblockの中でpushしてもだめ

下のコードは動く

file = Temfile.new('foo')

file
# => #<File:/var/folders//foo20191210-a8gjzw>

file << 'bar'

file.rewind

file.read
# => 'bar'

変更を加えた時はrewindする必要があるっぽい

ちなみにcreateを使う時はblock文の中でfileを使った処理をするが必要あります

後から操作しようとするとエラーが出ます

file = Temfile.create('foo') do |f|
    # fileを使った処理
end

file.read
#=> IOError: closed stream

結論

Tempfileの扱い方をわかってなかった、というかFileの扱いをわかってなかった

newはblockのなかでなんかしても意味ない