Current section

Files

Jump to
indieweb lib indieweb cache.ex
Raw

lib/indieweb/cache.ex

defmodule IndieWeb.Cache do
@moduledoc """
Provides the generic interface for handling caching logic for the IndieWeb library.
## Configuration
In order to change the underlying adapter used, set the `:cache` value in the
`:adapters` to an module that implements the behavior of `IndieWeb.Cache.Adapter`.
By default, `Cachex` by way of `IndieWeb.Cache.Adapters.Cachex` is used.
"""
@doc "Obtains an implementation of a `IndieWeb.Cache.Adapter` module."
@spec adapter() :: IndieWeb.Cache.Adapter.t()
def adapter(opts \\ []) do
opts
|> Keyword.get(:adapters, [])
|> Keyword.get(:cache, IndieWeb.Cache.Adapters.Cachex)
end
@doc "Fetches the value defined by `key` from the adapter; returning `value` if it doesn't exist."
@spec get(binary(), any(), keyword()) :: any()
def get(key, default_value \\ nil, options \\ []) do
adapter(options).get(key, default_value)
end
@doc "Removes the value of key `key` from the adapter."
@spec delete(binary(), keyword()) :: :ok | :error
def delete(key, options \\ []) do
adapter(options).delete(key)
end
@doc "Sets the key `key` with the value `value` to the adapter."
@spec set(binary(), any(), keyword(), keyword()) :: :ok | :error
def set(key, value, set_options \\ [], options \\ []) do
adapter(options).set(key, value, set_options)
end
end