Rubyのオブジェクトを外部ファイルに格納するためのクラス。 内部でMarshalを使っている。
db = PStore.new("/tmp/foo") db.transaction do p db.roots ary = db["root"] = [1,2,3,4] ary[0] = [1,1.5] end db.transaction do p db["root"] end
データベースにアクセスするためには、transactionのブロック内である必要がある。 インターフェースはHashライクである。
PStore.new(file)
ファイル名fileでデータベースを読み書きする。
fileのあるディレクトリは書き込み可能である必要がある。
なぜなら、データベースを更新するときにバックアップファイルが作成されるからだ。
バックアップファイル名はファイル名の後に~
がつく。
PStore#transaction
PStore#transaction(read_only=false) ((<ruby 1.7 feature>))
トランザクションに入る。 このブロックの中でしかデータベースの読み書きはできない。
ruby 1.7 feature: 1.7では読み込み専用のトランザクションが使用可能。
PStore#[name]
ルートnameに対応する値を得る。
Hash#[]
に相当。
PStore#[name] = value
ルートnameに対応する値valueをセットする。
Hash#[]=
に相当。
PStore#delete(name)
ルートnameに対応する値を削除する。
Hash#delete
に相当。
PStore#roots
ルートの集合を配列で返す。
Hash#keys
に相当。
PStore#root?(name)
nameがルートであるかどうか。
Hash#key?
に相当。
PStore#path
データベースのファイル名を得る。
PStore#commit
データベースの読み書きを終了する。 すなわち、transactionブロックから抜ける。 データベースの変更が反映される。
PStore#abort
データベースの読み書きを終了する。 transactionブロックから抜けるが、データベースの変更は反映されない。
PStore#in_transaction
トランザクションの中でなければ例外を発生させる。