lib/vedeu/repositories/cache.rb
# frozen_string_literal: true
module Vedeu
module Repositories
# Allow the storing of values for a finite period to save repeated
# computation.
#
# @note
# This class is not currently used and will be used in future.
#
# @api private
#
class Cache
# @return [Vedeu::Repositories::Cache]
def initialize
@cache ||= {}
@lock = Mutex.new
end
# Add a new resource to the cache.
#
# @param resource [void]
# @param options [Hash]
# @option options value [void] The value to be cached.
# @option options expires [Fixnum] The number of seconds after
# which the resource will have expired.
# @return [void]
def add(resource, options = {})
value = options[:value]
expires = options.fetch(:expires, 600)
@lock.synchronize do
@cache[resource] = {
value: value,
expires_at: (Time.now + expires),
}
end
end
# Remove all cached resources.
#
# @return [Hash]
def clear
@cache = {}
end
# Read the cached resource if it exists.
#
# @param resource [void]
# @return [void]
def read(resource)
resource = @cache[resource]
return unless resource
return if resource[:expires_at] < Time.now
resource[:value]
end
# Remove the cached resource if it exists.
#
# @param resource [void]
# @return [Boolean]
def remove(resource)
if @cache.key?(resource)
@cache.delete(resource)
true
else
false
end
end
end # Cache
end # Repositories
end # Vedeu