Sha256: 522d64bc8a3f7333cd469cdecf39f7efac89a03059e6577cb382d4406af7ecde

Contents?: true

Size: 950 Bytes

Versions: 7

Compression:

Stored size: 950 Bytes

Contents

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.exists?(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

    end
  end
end

Version data entries

7 entries across 7 versions & 2 rubygems

Version Path
spk-anemone-0.4.0 lib/anemone/storage/pstore.rb
anemone-0.4.0 lib/anemone/storage/pstore.rb
anemone-0.3.2 lib/anemone/storage/pstore.rb
spk-anemone-0.3.1 lib/anemone/storage/pstore.rb
anemone-0.3.1 lib/anemone/storage/pstore.rb
spk-anemone-0.3.0 lib/anemone/storage/pstore.rb
anemone-0.3.0 lib/anemone/storage/pstore.rb