新しい RubyZip API を使用したこの回答の最新バージョンについては、@bronson の回答を参照してください。
リンクした Rubyzip ドキュメントは少し古くなっています。最新のリリース (0.9.9)ではIOオブジェクトを処理できるため、StringIO を使用できます (少し調整してください)。
API は を受け入れますがIO、それがファイルであると想定して呼び出しを試みているように見えるpathため、最初にモンキー パッチを適用StringIOしてメソッドを追加しpathます (実際には何もする必要はありません)。
require 'stringio'
class StringIO
def path
end
end
次に、次のようなことができます。
require 'zip/zip'
Zip::ZipInputStream.open_buffer(StringIO.new(last_response.body)) do |io|
while (entry = io.get_next_entry)
# deal with your zip contents here, e.g.
puts "Contents of #{entry.name}: '#{io.read}'"
end
end
すべてがメモリ内で行われます。