Current section

Files

Jump to
bouncer lib adapters redis.ex
Raw

lib/adapters/redis.ex

defmodule Bouncer.Adapters.Redis do
@moduledoc """
The Redis adapter can be used by Bouncer.Session to store, retrieve, and
destroy session data within Redis.
"""
def redis do
Application.get_env(:bouncer, :redis)
end
@doc """
Saves session data to Redis using a given key.
## Examples
iex> Bouncer.Adapters.Redis.save(~s({"id": 1}), "UdOnTkNoW")
{ :ok, "UdOnTkNoW" }
iex> Bouncer.Adapters.Redis.save(~s({"id": 2}), nil)
{ :error, "wrong number of arguments" }
iex> Bouncer.Adapters.Redis.save(nil, 3)
{ :error, "wrong number of arguments" }
"""
def save(data, key) do
case redis().command(~w(SET) ++ [key] ++ [data]) do
{ :ok, _ } -> { :ok, key }
{ _, response } -> { :error, response }
end
end
@doc """
Retrieves session data from Redis using a given key.
## Examples
iex> Bouncer.Adapters.Redis.get("UdOnTkNoW")
{ :ok, ~s({"id": 1}) }
iex> Bouncer.Adapters.Redis.get("test")
{ :error, nil }
iex> Bouncer.Adapters.Redis.get(nil)
{ :error, "wrong number of arguments" }
"""
def get(key) do
case redis().command(~w(GET) ++ [key]) do
{ :ok, nil } -> { :error, nil }
{ :ok, data } -> { :ok, data }
{ _, response } -> { :error, response }
end
end
@doc """
Destroys a session by removing the data from Redis using a given key.
## Examples
iex> Bouncer.Adapters.Redis.delete(1)
{ :ok, 1 }
iex> Bouncer.Adapters.Redis.delete(2)
{ :error, 0 }
iex> Bouncer.Adapters.Redis.delete(nil)
{ :error, "wrong number of arguments" }
"""
def delete(key) do
case redis().command(~w(DEL) ++ [key]) do
{ :ok, ^key } -> { :ok, key }
{ _, response } -> { :error, response }
end
end
end