Packages
open_api_spex
3.20.0
3.22.3
3.22.2
3.22.1
3.22.0
3.21.5
3.21.4
3.21.3
3.21.2
3.21.1
3.21.0
3.20.1
3.20.0
3.19.1
3.19.0
3.18.3
3.18.2
3.18.1
3.18.0
3.17.3
3.17.2
3.17.1
3.17.0
3.16.4
3.16.3
3.16.2
3.16.1
3.16.0
3.15.0
3.14.0
3.13.0
3.12.0
3.11.0
3.10.0
3.9.0
3.8.0
3.7.0
3.6.0
3.5.2
3.5.1
3.5.0
3.4.0
3.3.0
3.2.1
3.2.0
3.1.0
3.0.0
2.3.1
2.3.0
2.2.0
2.1.1
2.1.0
2.0.0
1.1.4
1.1.3
1.1.2
1.1.1
1.1.0
1.0.1
1.0.0
Leverage Open Api Specification 3 (swagger) to document, test, validate and explore your Plug and Phoenix APIs.
Current section
Files
Jump to
Current section
Files
lib/open_api_spex/plug/cache.ex
defmodule OpenApiSpex.Plug.Cache do
@moduledoc """
Cache for OpenApiSpex API specs.
Settings:
```elixir
config :open_api_spex, :cache_adapter, Module
```
There are three cache implementations:
* `OpenApiSpex.Plug.PersistentTermCache` - default
* `OpenApiSpex.Plug.AppEnvCache` - for VMs that don't support `persistent_term`
* `OpenApiSpex.Plug.NoneCache` - none cache
If you are constantly modifying specs during development, you can configure the cache adapter
in `dev.exs` as follows to disable caching:
```elixir
config :open_api_spex, :cache_adapter, OpenApiSpex.Plug.NoneCache
```
"""
alias OpenApiSpex.OpenApi
default_adapter =
if function_exported?(:persistent_term, :info, 0) do
OpenApiSpex.Plug.PersistentTermCache
else
OpenApiSpex.Plug.AppEnvCache
end
@default_adapter default_adapter
@callback get(module) :: {OpenApi.t(), map} | nil
@callback put(module, {OpenApi.t(), map}) :: :ok
@callback erase(module) :: :ok
@doc """
Get cache adapter
"""
@spec adapter() :: module()
def adapter do
Application.get_env(:open_api_spex, :cache_adapter, @default_adapter)
end
@doc """
Only erase cache, put again when plug starting
"""
@spec refresh() :: :ok
def refresh do
adapter = adapter()
adapter.erase()
end
end