Sha256: 83787ce7e930867d82b2f6f0fab4f9cbddb3bde204d8afad3f572bc237446862

Contents?: true

Size: 1.64 KB

Versions: 2

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 [ProgressBar, 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

2 entries across 2 versions & 1 rubygems

Version Path
yoda-language-server-0.5.0 lib/yoda/store/adapters/leveldb_adapter.rb
yoda-language-server-0.4.0 lib/yoda/store/adapters/leveldb_adapter.rb