Sha256: 21162033a0b29312ab3aadba2df70e030fc40df0f5999b015df043be59328a15

Contents?: true

Size: 1.74 KB

Versions: 1

Compression:

Stored size: 1.74 KB

Contents

module Yoda
  module Store
    class Registry::LibraryRegistry
      class << self
        # @param library [Objects::Library]
        def for_library(library)
          adapter = Adapters.for(library.registry_path)
          namespace = adapter.namespace(library.name)

          if namespace.empty?
            patch = library.create_patch
            patch && compress_and_save(patch: patch, adapter: namespace)
          end

          new(id: library.id, adapter: namespace)
        end

        private

        # Store patch set data to the database.
        # old data in the database are discarded.
        # @param patch [Objects::Patch]
        # @param adapter [Adapters::Base]
        def compress_and_save(patch:, adapter:)
          el_keys = patch.keys
          progress = Instrument::Progress.new(el_keys.length) { |length:, index:| Instrument.instance.registry_dump(index: index, length: length) }

          data = Enumerator.new do |yielder|
            el_keys.each { |key| yielder << [key, patch.get(key)] }
          end

          adapter.batch_write(data, progress)
          Logger.info "saved #{el_keys.length} keys."
        end
      end

      # @return [String]
      attr_reader :id

      # @return [Adapters::Base]
      attr_reader :adapter

      # @param id [String]
      # @param adapter [Adapters::Base]
      def initialize(id:, adapter:)
        @id = id
        @adapter = adapter
      end

      def get(path)
        adapter.get(path)
      end

      # @param path [String]
      # @return [true, false]
      def has_key?(path)
        adapter.exists?(path)
      end

      def persistable?
        adapter.persistable?
      end

      def keys
        @keys ||= Set.new(adapter.keys.map(&:to_s) || [])
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
yoda-language-server-0.8.0 lib/yoda/store/registry/library_registry.rb