Packages
moon
2.79.4
2.90.5
retired
2.90.4
2.90.3
2.90.2
2.90.1
2.90.0
2.89.4
2.89.1
2.89.0
2.88.0
2.87.11
2.87.10
2.87.9
2.87.8
2.87.7
2.87.6
2.87.5
2.87.4
2.87.3
2.87.2
2.87.1
2.87.0
2.86.1
2.86.0
2.85.1
2.85.0
2.84.0
2.83.0
2.82.0
2.81.4
2.81.3
2.81.2
2.81.1
2.81.0
2.80.2
2.80.1
2.80.0
2.79.13
2.79.12
2.79.11
2.79.10
2.79.9
2.79.8
2.79.7
2.79.6
2.79.5
2.79.4
2.79.3
2.79.2
2.79.1
2.79.0
2.78.4
2.78.3
2.78.2
2.78.1
2.78.0
2.77.0
2.76.5
2.76.4
2.76.3
2.76.2
2.76.1
2.76.0
2.75.0
2.74.1
2.74.0
2.73.8
2.73.7
2.73.6
2.73.5
2.73.4
2.73.3
2.73.2
2.73.1
2.73.0
2.72.5
2.72.4
2.72.3
2.72.2
2.72.1
2.72.0
2.71.1
2.71.0
2.70.0
2.69.2
2.69.1
2.69.0
2.68.11
2.68.10
Components-based design system written in elixir
Current section
Files
Jump to
Current section
Files
lib/moon_web/mock_db/segments.ex
defmodule MoonWeb.MockDB.Segments do
@moduledoc false
use GenServer
@process_name :mock_segments
alias MoonWeb.MockDB.Utils
# client
def start_link do
GenServer.start_link(__MODULE__, [], name: @process_name)
end
def save(
segment = %{
name: _,
type: _,
params: _
}
) do
this_process() |> GenServer.call({:save, segment})
end
def get_by_id(id) do
this_process() |> GenServer.call({:get_by_id, id})
end
def list_all do
this_process() |> GenServer.call(:list_all)
end
def get_by_type(type) do
this_process() |> GenServer.call({:get_by_type, type})
end
# server
def init(_args) do
{:ok, %{all: []}}
end
def handle_call(:list_all, _from, state) do
{:reply, state.all, state}
end
def handle_call({:save, segment}, _from, state) do
segment = segment |> Map.put(:id, Utils.random_id())
{:reply, segment, %{all: [segment | state.all]}}
end
def handle_call({:get_by_id, id}, _form, state) do
case state.all |> Enum.filter(&(&1.id == id)) do
[x | _] -> {:reply, x, state}
_ -> {:reply, nil, state}
end
end
def handle_call({:get_by_type, type}, _form, state) do
{:reply, state.all |> Enum.filter(&(&1.type == type)), state}
end
# helpers
defp this_process do
Process.whereis(@process_name)
end
end