Sha256: 216b0fa066c99c7895f0adf69b7b0959f8a3228206436c9ea128ad116a76efd7

Contents?: true

Size: 1.64 KB

Versions: 6

Compression:

Stored size: 1.64 KB

Contents

require 'leveldb'
require 'json'

module Yoda
  module Store
    module Adapters
      class LeveldbAdapter < Base
        class << self
          def for(path)
            @pool ||= {}
            @pool[path] || (@pool[path] = new(path))
          end

          def type
            :leveldb
          end
        end

        # @param path [String] represents the path to store db.
        def initialize(path)
          @path = path
          @db = LevelDB::DB.new(path, compression: true)

          at_exit { @db.closed? || @db.close }
        end

        # @param address [String]
        # @return [any]
        def get(address)
          JSON.load(@db.get(address.to_s), symbolize_names: true)
        end

        # @param address [String]
        # @param object [Object]
        # @return [void]
        def put(address, object)
          @db.put(address.to_s, object.to_json)
        end

        # @param data [Enumerator<(String, Object)>]
        # @param bar [#increment, nil]
        def batch_write(data, bar)
          data.each do |(k, v)|
            @db.put(k, v)
            bar&.increment
          end
        end

        # @param address [String]
        # @return [void]
        def delete(address)
          @db.delete(address.to_s)
        end

        # @param address [String]
        # @return [true, false]
        def exist?(address)
          @db.exists?(address.to_s)
        end

        # @return [Array<String>]
        def keys
          @db.keys
        end

        def stats
          @db.stats
        end

        def clear
          @db.destroy!
        end

        def sync
          # nop
        end
      end
    end
  end
end

Version data entries

6 entries across 6 versions & 1 rubygems

Version Path
yoda-language-server-0.7.2 lib/yoda/store/adapters/leveldb_adapter.rb
yoda-language-server-0.7.1 lib/yoda/store/adapters/leveldb_adapter.rb
yoda-language-server-0.7.0 lib/yoda/store/adapters/leveldb_adapter.rb
yoda-language-server-0.6.2 lib/yoda/store/adapters/leveldb_adapter.rb
yoda-language-server-0.6.1 lib/yoda/store/adapters/leveldb_adapter.rb
yoda-language-server-0.6.0 lib/yoda/store/adapters/leveldb_adapter.rb