Hatena::Grouprubyist

雲雀は高く空を舞い RSSフィード

 | 

2007-06-14

YAML::Store (1) 17:58 YAML::Store (1) - 雲雀は高く空を舞い を含むブックマーク はてなブックマーク - YAML::Store (1) - 雲雀は高く空を舞い YAML::Store (1) - 雲雀は高く空を舞い のブックマークコメント

目的

YAML形式でデータファイルに残したい。

背景


ではどうもうまく書き込みがなされなかった。YAML::Storeがあるとか。YAML::StorePStoreYAML版。

というわけでまずはPStoreから調べてみる。

PStore

Rubyオブジェクトを外部ファイルに格納するためのクラス内部Marshalを使ってバイナリ化したデータを保存する、とか。

参考になるところ


以下「Rubyist Magazine - 標準添付ライブラリ紹介 【第 9 回】 PStore」を写経。正確な情報はそちらを参照のこと。

基本的な使い方

使い方は基本的には Hashと類似。

PStore#[]= で値を保存して、PStore#[] を使って値を取り出す。

また、Hash#keysHash#key?に相当するのはそれぞれPstore#rootsとPStore#root?。

データ操作はtransaction中のみ。データを参照するのみの場合は引数trueを指定することで、読み込み専用のtransactionとなる。

基本例

require 'pstore'

db = PStore.new('PStoretest')
db.transaction do
  p db.roots
  ary = db['root'] = [1,2,3,4] # 配列を db に設定
  ary[0] = [1,1.5]             # 破壊的に変更
end # 保存は transaction を抜けるときなので変更された結果が保存される

db.transaction(true) do # 読み込み専用モード
  p db.root?('root')
  p db['root']
end

begin
  db.transaction(true) do
    db['root'] = 'hoge' # 書き込もうとすると PStore::Error
  end
rescue PStore::Error
  p $!
end

実行結果 (1回目)

[]
true
[[1, 1.5], 2, 3, 4]
#<PStore::Error: in read-only transaction>

実行結果 (2 回目以降):

["root"]
true
[[1, 1.5], 2, 3, 4]
#<PStore::Error: in read-only transaction>

続く!

つぎこそYAML::Store