Sha256: b51fee510ddbd0ca03465e358e12cbc565dca1cdca1d75bd69e60eb9dd824311

Contents?: true

Size: 1.48 KB

Versions: 6

Compression:

Stored size: 1.48 KB

Contents

require 'leveldb'

module Moneta
  module Adapters
    # LevelDB backend
    # @api public
    class LevelDB
      include Defaults
      include HashAdapter
      include IncrementSupport
      include CreateSupport
      include EachKeySupport

      # @param [Hash] options
      # @option options [String] :dir - Database path
      # @option options All other options passed to `LevelDB::DB#new`
      # @option options [::LevelDB::DB] :backend Use existing backend instance
      def initialize(options = {})
        @backend = options[:backend] ||
          begin
            raise ArgumentError, 'Option :dir is required' unless options[:dir]
            ::LevelDB::DB.new(options[:dir])
          end
      end

      # (see Proxy#key?)
      def key?(key, options = {})
        @backend.includes?(key)
      end

      # (see Proxy#clear)
      def clear(options = {})
        @backend.each { |k,| delete(k, options) }
        self
      end

      # (see Proxy#close)
      def close
        @backend.close
        nil
      end

      # (see Proxy#each_key)
      def each_key
        return enum_for(:each_key) { @backend.size } unless block_given?
        @backend.each { |key, _| yield key }
        self
      end

      # (see Proxy#values_at)
      def values_at(*keys, **options)
        ret = nil
        @backend.batch { ret = super }
        ret
      end

      # (see Proxy#merge!)
      def merge!(*keys, **options)
        @backend.batch { super }
        self
      end
    end
  end
end

Version data entries

6 entries across 6 versions & 1 rubygems

Version Path
moneta-1.4.2 lib/moneta/adapters/leveldb.rb
moneta-1.4.1 lib/moneta/adapters/leveldb.rb
moneta-1.4.0 lib/moneta/adapters/leveldb.rb
moneta-1.3.0 lib/moneta/adapters/leveldb.rb
moneta-1.2.1 lib/moneta/adapters/leveldb.rb
moneta-1.2.0 lib/moneta/adapters/leveldb.rb