1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68
|
module Moneta
# @api private
module HashAdapter
attr_reader :backend
# (see Proxy#key?)
def key?(key, options = {})
@backend.has_key?(key)
end
# (see Proxy#load)
def load(key, options = {})
@backend[key]
end
# (see Proxy#store)
def store(key, value, options = {})
@backend[key] = value
end
# (see Proxy#delete)
def delete(key, options = {})
@backend.delete(key)
end
# (see Proxy#clear)
def clear(options = {})
@backend.clear
self
end
# (see Defaults#values_at)
def values_at(*keys, **options)
return super unless @backend.respond_to? :values_at
@backend.values_at(*keys)
end
# (see Defaults#fetch_values)
def fetch_values(*keys, **options, &defaults)
return super unless @backend.respond_to? :fetch_values
defaults ||= {} # prevents KeyError
@backend.fetch_values(*keys, &defaults)
end
# (see Defaults#slice)
def slice(*keys, **options)
return super unless @backend.respond_to? :slice
@backend.slice(*keys)
end
# (see Defaults#merge!)
def merge!(pairs, options = {}, &block)
return super unless method = [:merge!, :update].find do |method|
@backend.respond_to? method
end
hash = Hash === pairs ? pairs : Hash[pairs.to_a]
case method
when :merge!
@backend.merge!(hash, &block)
when :update
@backend.update(hash, &block)
end
self
end
end
end
|