kind=defined
names=transaction
visibility=public

--- transaction(read_only = false) -> ()
トランザクションに入ります。このブロックの中でのみデータベースの読み書きができます。
読み込み専用のトランザクションが使用可能です。 

@param read_only 真を指定すると、読み込み専用のトランザクションになります。 

@raise PStore::Error read_only を真にしたときに、データベースを変更しようした場合に発生します。 

  require 'yaml/store'

  db = YAML::Store.new("/tmp/store.yaml")
  db.transaction {
    db["hoge"] = [ 1, 2, 3, 4]
  }

  begin
    db.transaction(true) {
      db["hoge"] = [ 1, 2, 3, 4]
    }
  rescue PStore::Error
    puts "読み込み専用のトランザクションに書き込もうとしました。 "
  end


使い方は [[c:PStore]] とほとんど同じです。

例

  require "yaml/store"

  db = YAML::Store.new("sample.yml")
  db.transaction do
    db["hoge"] = {1 => 100, "bar" => 101}
  end

  # sample.yml
  hoge:
    1: 100
    bar: 101

[[c:PStore]] 同様、ユーザが定義したクラスのオブジェクトを保存することもできます。

  require "yaml/store"
  
  class Foo
    attr_accessor :foo
  end
  
  db = YAML::Store.new("sample.yml")
  db.transaction do
    f = Foo.new
    f.foo = 777
    db["bar"] = f
  end
  
  # sample.yml
  bar: !ruby/object:Foo
    foo: 777
