Sha256: 3c5ff673a9255afbb9972fcb892336d212df2b1bc7fe306d3f2e1a6ac6a13917

Contents?: true

Size: 1.74 KB

Versions: 6

Compression:

Stored size: 1.74 KB

Contents

require 'json'

module Yoda
  module Store
    module Adapters
      # An adapter implementation to store object in memory.
      # This implementation losts data on exit and we recommend to use this adapter only for test.
      class MemoryAdapter < Base
        class << self
          def for(path)
            @pool ||= {}
            @pool[path] || (@pool[path] = new(path))
          end

          def type
            :memory
          end
        end

        # @return [Hash{String => String}]
        attr_reader :db

        # @param path [String, nil] represents the path to store db.
        def initialize(path = nil)
          @path = path
          @db = {}
        end

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

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

        # @param address [String]
        # @param object [Object]
        # @return [void]
        def put(address, object)
          db[address.to_s] = object.to_json
        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.member?(address.to_s)
        end

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

        def stats
          "No stats"
        end

        def clear
          db.clear
        end

        def sync
        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/memory_adapter.rb
yoda-language-server-0.7.1 lib/yoda/store/adapters/memory_adapter.rb
yoda-language-server-0.7.0 lib/yoda/store/adapters/memory_adapter.rb
yoda-language-server-0.6.2 lib/yoda/store/adapters/memory_adapter.rb
yoda-language-server-0.6.1 lib/yoda/store/adapters/memory_adapter.rb
yoda-language-server-0.6.0 lib/yoda/store/adapters/memory_adapter.rb