Paul Hinze 06ad1b4565
Fixup tests for Ruby 3.0
This is a pass through test failures and deprecation warnings:

 * Make all ambiguous `.with(..., key: val)` use explicit hashes to
   prevent test failures for argument mismatch in Ruby 3.0
 * Scope down all unbounded `raise_error` to address warnings (remove
   one test that was revealed to be referencing a nonexistent variable
   once the raise_error was scoped.)
 * Update all `any_instance` usage to new syntax to address warnings
 * Allow the service cache to be cleared and do so between some tests
 * Fix a small bug in with_plugin's plugin not found code path (revealed
   by a scoped and_raise)
2022-04-25 12:26:40 -05:00

89 lines
2.1 KiB
Ruby

module VagrantPlugins
module CommandServe
module Util
# Simple container for caching values
class Cacher
include HasLogger
def initialize
@registry = {}
end
def clear
@registry = {}
end
# Check if the given key is currently registered
#
# @param key [Object] Generally String or Symbol
# @return [Boolean]
def registered?(key)
@registry.key?(key)
end
# Register a new value under given key
#
# @param key [Object] Generally String or Symbol
# @param value [Object] Value to register
# @return [Object] value
def register(key, value)
logger.trace("cache register #{key} = #{value}")
@registry[key] = value
end
# Get registered value
#
# @param key [Object] Generally String or Symbol
# @return [Object] value
# @raises [KeyError]
def get(key)
if !@registry.key?(key)
raise KeyError,
"Unknown cache key `#{key.inspect}'"
end
@registry[key]
end
# Remove item from the cache
#
# @param key [Object] Generally String or Symbol
# @return [Object] value or nil
def unregister(key)
@registry.delete(key)
end
# Yield value to given block
#
# @param key [Object] Generally String or Symbol
# @yieldparam [Object] value
def use(key)
if !@registry.key?(key)
raise KeyError,
"Unknown cache key `#{key.inspect}'"
end
yield @registry[key]
end
# Generate a key with given arguments
#
# @return [String]
def key(*args)
args.map { |v|
if v.is_a?(Class)
v.name
elsif v.respond_to?(:client)
v.client.respond_to?(:resource_id) ?
v.client.resource_id :
v.client.to_proto.to_s
else
v.to_s
end
}.sort.join("-")
end
end
end
end
end