PStore

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

トランザクションの中でなければ例外を発生させる。