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 のあるディレクトリは書き込み可能である必要がある。 データベースを更新するときにバックアップファイルが作成されるため。
ruby 1.8.2 feature: データベースの更新が成功すると、バックアップファイルは削除される。バックアップファイル名は ファイル名に ".tmp" および ".new" を付けたもの。
ruby 1.8.1 まで: バックアップファイルは削除されずに残る。バックアップファイル名はファイル名の後に "~" を付けたもの。
transaction {|pstore| ... }transaction(read_only=false) {|pstore| ... } ((<ruby 1.7 feature>))トランザクションに入る。 このブロックの中でしかデータベースの読み書きはできない。
ruby 1.7 feature: 1.7では読み込み専用のトランザクションが使用可能。
[name]ルートnameに対応する値を得る。
Hash#[]に相当。
[name] = valueルートnameに対応する値valueをセットする。
Hash#[]=に相当。
fetch(name[, default]) ((<ruby 1.8 feature>))ルートnameに対応する値を得る。
該当するルートが登録されていない時には、
引数 default が与えられていればその値を返し、
与えられていなければ例外 PStore::Error が発生します。
Hash#fetchに相当。
delete(name)ルートnameに対応する値を削除する。
Hash#deleteに相当。
rootsルートの集合を配列で返す。
Hash#keysに相当。
root?(name)nameがルートであるかどうか。
Hash#key?に相当。
pathデータベースのファイル名を得る。
commitデータベースの読み書きを終了する。 すなわち、transactionブロックから抜ける。 データベースの変更が反映される。
abortデータベースの読み書きを終了する。 transactionブロックから抜けるが、データベースの変更は反映されない。