Ruby 1.9.3 リファレンスマニュアル > ライブラリ一覧 > yaml/storeライブラリ > YAML::Storeクラス

class YAML::Store + PStore

クラスの継承リスト: YAML::Store < PStore < Object < Kernel < BasicObject

要約

PStoreYAML 版です。 Marshal.#dump したバイナリ形式の 代わりに YAML 形式でファイルに保存します。

使い方は PStore とほとんど同じです。 インターフェースは Hash に似ています。

特異メソッド

new(*options) -> YAML::Store

自身を初期化します。

YAML 形式のファイルを読み込ませたい場合は、最初の引数にファイル名を文字列で指定します。 最後の引数がハッシュであった場合は、YAML 出力時のオプションを変更します。

[PARAM] options:
読み込ませたいファイルや、オプションを与えます。

[SEE_ALSO] Object#to_yaml

new(file, thread_safe = false) -> PStore

ファイル名 file に対してデータベースを読み書きします。

データベースを更新するときにバックアップファイルが作成されるため、 file のあるディレクトリは書き込み可能である必要があります。 データベースの更新が成功すると、バックアップファイルは削除されます。バックアップファイル名は ファイル名に ".tmp" および ".new" を付けたものです。

[PARAM] file:
データベースファイル名。
[PARAM] thread_safe:
真を指定すると Mutex を用いてスレッドセーフになります。デフォルトは偽です。

インスタンスメソッド

self[name] -> object

ルートnameに対応する値を得ます。

[PARAM] name:
探索するルート。
[EXCEPTION] PStore::Error:
トランザクション外でこのメソッドが呼び出された場合に発生します。

[SEE_ALSO] Hash#[]

self[name] = value

ルート name に対応する値 value をセットします。

[PARAM] name:
ルート。
[PARAM] value:
格納する値。
[EXCEPTION] PStore::Error:
トランザクション外でこのメソッドが呼び出された場合に発生します。

[SEE_ALSO] Hash#[]=

abort -> ()

データベースの読み書きを終了します。

transaction ブロックから抜けますが、データベースの変更は反映されません。

[EXCEPTION] PStore::Error:
トランザクション外でこのメソッドが呼び出された場合に発生します。

例:

require 'pstore'
db = PStore.new("/tmp/foo")
db.transaction do
  p db.roots       # => []
  ary = db["root"] = [1,2,3,4]
  db.abort
  ary[0] = [1,1.5] # => ここは実行されない。
end

db.transaction do |pstore|
  pstore["root"]       # => nil
end
commit -> ()

データベースの読み書きを終了します。

transaction ブロックから抜け、データベースの変更が反映されます。

[EXCEPTION] PStore::Error:
トランザクション外でこのメソッドが呼び出された場合に発生します。

例:

require 'pstore'
db = PStore.new("/tmp/foo")
db.transaction do
  p db.roots       # => []
  ary = db["root"] = [1,2,3,4]
  db.commit
  ary[0] = [1,1.5] # => ここは実行されない。
end

db.transaction do |pstore|
  pstore["root"]       # => [[1, 2, 3, 4]
end
delete(name) -> object

ルートnameに対応する値を削除します。

[PARAM] name:
探索するルート。
[RETURN]
削除した値を返します。
[EXCEPTION] PStore::Error:
トランザクション外でこのメソッドが呼び出された場合に発生します。

例:

require 'pstore'
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 |pstore|
  pstore.delete("root")       # => [[1, 1.5], 2, 3, 4]
  pstore.delete("root")       # => nil
end

[SEE_ALSO] Hash#delete

dump(table) -> String

YAML 形式の文字列を返します。

[PARAM] table:
使用されません。
empty_marshal_checksum -> String

空のデータのチェックサムを返します。

empty_marshal_data -> String

空のデータを返します。

fetch(name, default = PStore::Error) -> object

ルートnameに対応する値を得ます。

該当するルートが登録されていない時には、 引数 default が与えられていればその値を返し、 与えられていなければ例外 PStore::Error が発生します。

[PARAM] name:
探索するルート。
[PARAM] default:
name に対応するルートが登録されていない場合に返す値を指定する。
[EXCEPTION] PStore::Error:
name に対応するルートが登録されていないかつ、 default が与えられていない場合に発生します。 また、トランザクション外でこのメソッドが呼び出された場合に発生します。

例:

require 'pstore'
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(true) do |pstore|
  pstore.fetch("root")        # => [[1, 1.5], 2, 3, 4]
  pstore.fetch("root", 'aaa') # => [[1, 1.5], 2, 3, 4]
  pstore.fetch("not_root")    # => 例外発生
end

[SEE_ALSO] Hash#fetch, PStore#[]

load(content) -> object

YAML 形式の文字列からデータを読み込みます。

[PARAM] content:
YAML 形式の文字列を指定します。
marshal_dump_supports_canonical_option? -> false

YAML::Store では Marshal.#dump を使用しないので常に偽を返します。

path -> String

データベースのファイル名を得ます。

root?(name) -> bool

ルート name がデータベースに格納されている場合に真を返します。

[PARAM] name:
探索するルート。
[EXCEPTION] PStore::Error:
トランザクション外でこのメソッドが呼び出された場合に発生します。

[SEE_ALSO] Hash#key?

roots -> Array

ルートの集合を配列で返します。

[EXCEPTION] PStore::Error:
トランザクション外でこのメソッドが呼び出された場合に発生します。

[SEE_ALSO] Hash#keys

transaction(read_only = false) {|pstore| ... } -> object

トランザクションに入ります。 このブロックの中でのみデータベースの読み書きができます。

読み込み専用のトランザクションが使用可能です。

[PARAM] read_only:
真を指定すると、読み込み専用のトランザクションになります。
[RETURN]
ブロックで最後に評価した値を返します。
[EXCEPTION] PStore::Error:
read_only を真にしたときに、データベースを変更しようした場合に発生します。

例:

require 'pstore'
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(true) do |pstore|
  pstore["root"] = 'aaa' # => ここで例外発生
end
ultra_safe -> bool

真であれば、パフォーマンスと引き換えにファイル更新の衝突を避けることができます。 デフォルトは偽です。

このフラグの効果があるのは一部のプラットフォームだけです。 (e.g. all POSIX platforms: Linux, Mac OS X, FreeBSD, etc)

ultra_safe=(flag)

真をセットすると、パフォーマンスと引き換えにファイル更新の衝突を避けることができます。

このフラグの効果があるのは一部のプラットフォームだけです。 (e.g. all POSIX platforms: Linux, Mac OS X, FreeBSD, etc)

[PARAM] flag:
真偽値を指定します。

privateメソッド

in_transaction -> ()

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

定数

EMPTY_MARSHAL_CHECKSUM -> String

内部で使用します。

EMPTY_MARSHAL_CHECKSUM -> String

内部で利用する定数です。

EMPTY_MARSHAL_DATA -> String

内部で使用します。

EMPTY_MARSHAL_DATA -> String

内部で利用する定数です。

EMPTY_STRING -> String

内部で利用する定数です。

RDWR_ACCESS -> Fixnum

内部で利用する定数です。

RD_ACCESS -> Fixnum

内部で利用する定数です。

WR_ACCESS -> Fixnum

内部で利用する定数です。

class YAML::Store