Packages

PhoenixGonFork hex - your Phoenix variables in your JavaScript. Without problems with releases now (because no Mix.env() check in runtime).

Current section

Files

Jump to
phoenix_gon_fork lib phoenix_gon controller.ex
Raw

lib/phoenix_gon/controller.ex

defmodule PhoenixGon.Controller do
import Plug.Conn
import PhoenixGon.Utils
@moduledoc """
Adds helpers for working with gon on elixir controller modules.
"""
@doc """
Put variables to gon.
"""
@spec put_gon(Plug.Conn.t(), Atom.t(), any()) :: Plug.Conn.t()
def put_gon(conn, key, value) when is_atom(key) do
put_gon(conn, %{key => value})
end
@doc false
@spec put_gon(Plug.Conn.t(), Keyword.t() | Map.t()) :: Plug.Conn.t()
def put_gon(_conn, _opts)
@doc false
def put_gon(conn, opts) when is_list(opts) do
put_gon(conn, Enum.into(opts, %{}))
end
@doc false
def put_gon(conn, opts) when is_map(opts) do
%PhoenixGon.Storage{assets: assets} = variables(conn)
assets = Map.merge(assets, opts)
put_private(conn, :phoenix_gon, %{variables(conn) | assets: assets})
end
@doc """
Update variables in gon.
"""
@spec update_gon(Plug.Conn.t(), Atom.t(), any()) :: Plug.Conn.t()
def update_gon(conn, key, value) when is_atom(key) do
put_gon(conn, key, value)
end
@doc false
@spec update_gon(Plug.Conn.t(), Keyword.t()) :: Plug.Conn.t()
def update_gon(_conn, _opts)
@doc false
def update_gon(conn, opts) when is_list(opts) do
put_gon(conn, opts)
end
@doc false
def update_gon(conn, opts) when is_map(opts) do
put_gon(conn, opts)
end
@doc """
Remove variable from gon.
"""
@spec drop_gon(Plug.Conn.t(), Atom.t() | List.t()) :: Plug.Conn.t()
def drop_gon(_conn, _opts)
@doc false
def drop_gon(conn, key) when is_atom(key) do
drop_gon(conn, [key])
end
@doc false
def drop_gon(conn, opts) when is_list(opts) do
%PhoenixGon.Storage{assets: assets} = variables(conn)
assets = Map.drop(assets, opts)
put_private(conn, :phoenix_gon, %{variables(conn) | assets: assets})
end
@doc """
Returns variable.
"""
@spec get_gon(Plug.Conn.t(), Atom.t()) :: any()
def get_gon(conn, key) when is_atom(key) do
Map.get(variables(conn).assets, key)
end
end