Sha256: a204e836ea56f7412e286ac5db8bdd67d95c525fe04d1c3ba8d3d72afa6371e5

Contents?: true

Size: 1.36 KB

Versions: 3

Compression:

Stored size: 1.36 KB

Contents

# frozen_string_literal: true

module DevSuite
  module Utils
    module Store
      require_relative "config"
      require_relative "driver"

      class Store
        def initialize(**options)
          @driver = initialize_driver(**options)
        end

        def set(key, value)
          @driver.set(key, value)
        end

        def fetch(key)
          @driver.fetch(key)
        end

        def delete(key)
          @driver.delete(key)
        end

        def import(source)
          @driver.import(source)
        end

        def export(destination)
          @driver.export(destination)
        end

        def clear
          @driver.clear
        end

        private

        def initialize_driver(**options)
          return Config.configuration.driver unless options.key?(:driver)

          build_driver(options)
        end

        def build_driver(options)
          Driver.build_component(options.fetch(:driver), **options.except(:driver))
        end
      end

      class << self
        # Retrieve the singleton store instance
        def instance
          @store ||= Store.new
        end

        # Reset the singleton store instance
        def reset!
          @store = nil
        end

        # Create a new store instance (isolated from the singleton)
        def create(**options)
          Store.new(**options)
        end
      end
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
dev_suite-0.2.10 lib/dev_suite/utils/store/store.rb
dev_suite-0.2.9 lib/dev_suite/utils/store/store.rb
dev_suite-0.2.8 lib/dev_suite/utils/store/store.rb