51 lines
971 B
Ruby
51 lines
971 B
Ruby
require 'pstore'
|
|
require 'forwardable'
|
|
|
|
module Anemone
|
|
module Storage
|
|
class PStore
|
|
extend Forwardable
|
|
|
|
def_delegators :@keys, :has_key?, :keys, :size
|
|
|
|
def initialize(file)
|
|
File.delete(file) if File.exist?(file)
|
|
@store = ::PStore.new(file)
|
|
@keys = {}
|
|
end
|
|
|
|
def [](key)
|
|
@store.transaction { |s| s[key] }
|
|
end
|
|
|
|
def []=(key,value)
|
|
@keys[key] = nil
|
|
@store.transaction { |s| s[key] = value }
|
|
end
|
|
|
|
def delete(key)
|
|
@keys.delete(key)
|
|
@store.transaction { |s| s.delete key}
|
|
end
|
|
|
|
def each
|
|
@keys.each_key do |key|
|
|
value = nil
|
|
@store.transaction { |s| value = s[key] }
|
|
yield key, value
|
|
end
|
|
end
|
|
|
|
def merge!(hash)
|
|
@store.transaction do |s|
|
|
hash.each { |key, value| s[key] = value; @keys[key] = nil }
|
|
end
|
|
self
|
|
end
|
|
|
|
def close; end
|
|
|
|
end
|
|
end
|
|
end
|