http://rubyforge.org/projects/zipruby/
Zip/Ruby 0.2.8をリリースしました。
変更点は次のとおり。
オンメモリっぽいAPIの追加
メモリ上のデータを操作するAPIを追加しました。
裏でテンポラリファイルを作っているので、オンメモリの作業ではないです。
require 'zipruby' $stdout.binmode buf = '' Zip::Archive.open_buffer(buf, Zip::CREATE) do |ar| ar.add_buffer('bar.txt', 'zoo'); end Zip::Archive.open_buffer(buf) do |ar| ar.each do |f| puts f.name end end
「標準入力からZipファイルを読み込んで、暗号化して出力する」とかできます。
#!/usr/bin/env ruby require 'zipruby' $stdout.binmode begin ar = Zip::Archive.open_buffer(ARGF.read) ar.encrypt('pass') print ar.read ensure ar.close end
~/work$ cat foo.zip | ./enc.rb > bar.zip
テンポラリファイルはArchiveをクローズしたタイミングで削除されます。
ArchiveがGCに回収されるタイミングでも削除されます。
任意のZipデータをちまちま読み込むこともできます。
stream = lambda do return ... # Zipデータをちまちま返す。ストリームの終わりはnil end Zip::Archive.open_buffer(stream) do |ar| ar.each do |f| puts f.name end end
こまごました変更点
- Zip::TRUNCフラグの追加
- (あれば)OSのmkstemp、fseeko、ftelloを使うようにした
- Zip::Archive#add(&block)でブロック内の例外を無視するようにした