Current section
Files
Jump to
Current section
Files
lib/resource_cache.ex
defmodule ResourceCache do
@moduledoc ~S"""
Fast caching with clear syntax.
## Quick Setup
```elixir
def deps do
[
{:resource_cache, "~> 0.1"}
]
end
```
Define a cache by setting a resource (in this case Ecto schema)
and source. (The Ecto repo to query.)
```elixir
defmodule MyApp.Categories do
use ResourceCache
resource MyApp.Category
source :ecto, repo: MyApp.Repo
end
```
Now the cache can be used for fast listing:
```elixir
iex> MyApp.Categories.list()
[%MyApp.Category{}, ...]
```
Indices can be added to do quick lookups by value:
```elixir
defmodule MyApp.Categories do
use ResourceCache
resource MyApp.Category
source :ecto, repo: MyApp.Repo
index :slug, primary: true
end
```
Now `get_by_slug/1` can be used.
In addition to the standard `get_by_slug`,
`get/1` is also available since it was defined as primary index.
```elixir
iex> MyApp.Categories.get("electronics")
%MyApp.Category{}
iex> MyApp.Categories.get_by_slug("electronics")
%MyApp.Category{}
iex> MyApp.Categories.get("fake")
nil
iex> MyApp.Categories.get_by_slug("fake")
nil
```
There is no limit to the amount of indices that can be added.
It is possible to pass an optional type for each index,
to generate cleaner specs for the function arguments.
```elixir
index :slug, primary: true, type: String.t
```
"""
end