memorandums

日々の生活で問題解決したこと、知ってよかったことなどを自分が思い出すために記録しています。

PStoreのtransactionメソッドのようなもの

メモです。今、rubyのおさらいを兼ねて「作りながら学ぶRuby入門」をざーっとフォローしているのですが、そこで出てきたPstoreの使い方のページ(176P)に以下のコードがあります。

require 'pstore'
db = PStore.new('dbfile')

db.transaction do
  db["drink"] = "coffee"
  db["fruits"] = ["apple", "banana"]
end  #Pstoreに保存されるのは、transactionメソッドを抜けるとき

こういう使い方を自作クラスに組み込むとすればどう作るか。。。ちょっと作ってみました。ファイルアクセスはありませんがつけようと思えばつけられます。こんな感じで書いているんでしょうかね?(全く違っていたらゴメンナサイ!)PStoreのこれをDSLと呼んでいいのかはわかりませんが、やはりカッコイイですね。。。私がちょっとJavaを書いている限りではこういう発想はでてきません。

class PStore_modoki
  attr_accessor :data
  def initialize
    @data = {}
  end 
  def transaction
    yield 
  end 
  def []=(k, v)
    @data[k] = v 
  end 
  def to_s
    "#@data"
  end 
end

p = PStore_modoki.new
p.transaction {
  p["param1"] = 123 
  p["param2"] = "abc"
}

puts p