Packages
mob_dev
0.2.6
0.6.23
0.6.22
0.6.21
0.6.20
0.6.19
0.6.18
0.6.17
0.6.16
0.6.15
0.6.14
0.6.13
0.6.12
0.6.11
0.6.10
0.6.9
0.6.8
0.6.7
0.6.6
0.6.5
0.6.4
0.6.3
0.6.2
0.6.1
0.6.0
0.5.17
0.5.16
0.5.15
0.5.14
0.5.13
0.5.12
0.5.11
0.5.10
0.5.9
0.5.8
0.5.7
0.5.6
0.5.5
0.5.4
0.5.3
0.5.2
0.5.1
0.5.0
0.4.0
0.3.37
0.3.35
0.3.34
0.3.33
0.3.28
0.3.26
0.3.23
0.3.21
0.3.19
0.3.18
0.3.17
0.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
0.3.4
0.3.3
0.3.2
0.3.1
0.3.0
0.2.18
0.2.17
0.2.15
0.2.14
0.2.13
0.2.12
0.2.11
0.2.10
0.2.9
0.2.8
0.2.7
0.2.6
0.2.5
0.2.4
0.2.3
0.2.2
0.2.1
0.2.0
0.1.0
Development tooling for the Mob mobile framework
Current section
Files
Jump to
Current section
Files
lib/mob_dev/server/log_buffer.ex
defmodule MobDev.Server.LogBuffer do
@moduledoc """
Holds the last N log lines in memory so the LiveView can restore them on
reconnect without losing context from before a crash or page refresh.
"""
use GenServer
@limit 500
@spec start_link(keyword()) :: GenServer.on_start()
def start_link(opts \\ []) do
GenServer.start_link(__MODULE__, opts, name: __MODULE__)
end
@spec get() :: [map()]
def get, do: GenServer.call(__MODULE__, :get)
@spec push(map()) :: :ok
def push(line), do: GenServer.cast(__MODULE__, {:push, line})
@spec clear() :: :ok
def clear, do: GenServer.cast(__MODULE__, :clear)
@impl GenServer
@spec init(term()) :: {:ok, [map()]}
def init(_), do: {:ok, []}
@impl GenServer
@spec handle_call(:get, GenServer.from(), [map()]) :: {:reply, [map()], [map()]}
def handle_call(:get, _from, lines), do: {:reply, lines, lines}
@impl GenServer
@spec handle_cast({:push, map()} | :clear, [map()]) :: {:noreply, [map()]}
def handle_cast({:push, line}, lines) do
{:noreply, Enum.take([line | lines], @limit)}
end
def handle_cast(:clear, _lines), do: {:noreply, []}
end