Class: Archipelago::Hashish::BerkeleyHashishProvider
- Inherits:
-
Object
- Object
- Archipelago::Hashish::BerkeleyHashishProvider
- Defined in:
- lib/archipelago/hashish.rb
Overview
A simple persistence provider backed by Berkeley db.
Instance Method Summary collapse
-
#close! ⇒ Object
Close all our databases.
-
#get_cached_hashish(options) ⇒ Object
Get a CachedHashish either backed by a Berkeley Database (if
:nameis given) or by an Archipelago::Sanitation network (if:officeris given). -
#get_dup_tree(name, flags = BDB::CREATE | BDB::NOMMAP) ⇒ Object
Get a BDB::Btree allowing duplicates with
nameandflags. -
#get_hashish(name, flags = BDB::CREATE | BDB::NOMMAP) ⇒ Object
Get a BDB::Hash with
nameandflags. -
#initialize(env_path) ⇒ BerkeleyHashishProvider
constructor
Initialize an instance with the given
env_pathto its database dir. -
#unlink! ⇒ Object
Close and remove all our databases.
Constructor Details
#initialize(env_path) ⇒ BerkeleyHashishProvider
Initialize an instance with the given env_path to its database dir.
395 396 397 398 399 400 |
# File 'lib/archipelago/hashish.rb', line 395 def initialize(env_path) env_path.mkpath @env = BDB::Env.open(env_path, BDB::CREATE | BDB::INIT_MPOOL | BDB::INIT_TRANSACTION) @berkeley_hashishes = [] @bdb_dbs = [] end |
Instance Method Details
#close! ⇒ Object
Close all our databases.
440 441 442 443 444 445 446 447 |
# File 'lib/archipelago/hashish.rb', line 440 def close! @berkeley_hashishes.each do |h| h.close! end @bdb_dbs.each do |d| d.close end end |
#get_cached_hashish(options) ⇒ Object
Get a CachedHashish either backed by a Berkeley Database (if :name is given) or by an Archipelago::Sanitation network (if :officer is given).
405 406 407 408 409 410 411 412 413 414 415 |
# File 'lib/archipelago/hashish.rb', line 405 def get_cached_hashish() if [:officer] hashish = DumpHashish.new([:officer]) @berkeley_hashishes << hashish return hashish elsif [:name] hashish = BerkeleyHashish.new([:name], @env) @berkeley_hashishes << hashish return hashish end end |
#get_dup_tree(name, flags = BDB::CREATE | BDB::NOMMAP) ⇒ Object
Get a BDB::Btree allowing duplicates with name and flags.
419 420 421 422 423 424 425 426 427 428 |
# File 'lib/archipelago/hashish.rb', line 419 def get_dup_tree(name, flags = BDB::CREATE | BDB::NOMMAP) db = BDB::Btree.open(Pathname.new(File.join(@env.home, name))., nil, flags, 0, "env" => @env, "set_flags" => BDB::DUP) @bdb_dbs << db return db end |
#get_hashish(name, flags = BDB::CREATE | BDB::NOMMAP) ⇒ Object
Get a BDB::Hash with name and flags.
432 433 434 435 436 |
# File 'lib/archipelago/hashish.rb', line 432 def get_hashish(name, flags = BDB::CREATE | BDB::NOMMAP) db = @env.open_db(BDB::HASH, name, nil, flags) @bdb_dbs << db return db end |
#unlink! ⇒ Object
Close and remove all our databases.
451 452 453 454 455 456 |
# File 'lib/archipelago/hashish.rb', line 451 def unlink! close! home = Pathname.new(@env.home). @env.close home.rmtree if home.exist? end |