Packages
exvcr
0.16.0
0.17.1
0.17.0
0.16.0
0.15.2
0.15.1
0.15.0
0.14.4
0.14.3
0.14.2
0.14.1
0.14.0
0.13.5
0.13.4
0.13.3
0.13.2
0.13.1
0.13.0
0.12.3
0.12.2
0.12.1
0.12.0
0.11.2
0.11.1
0.11.0
0.10.4
0.10.3
0.10.2
0.10.1
0.10.0
0.9.1
0.9.0
0.8.12
0.8.11
0.8.10
0.8.9
0.8.8
0.8.7
0.8.6
0.8.5
0.8.4
0.8.3
0.8.2
0.8.1
0.8.0
0.7.4
0.7.3
0.7.2
0.7.1
0.7.0
0.6.1
0.6.0
0.5.2
0.5.1
0.5.0
0.4.1
0.4.0
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.1
0.2.0
0.1.7
0.1.6
0.1.5
HTTP request/response recording library for elixir, inspired by VCR.
Current section
Files
Jump to
Current section
Files
lib/exvcr/actor.ex
defmodule ExVCR.Actor do
@moduledoc """
Provides data store for values used by ExVCR.Recorder.
"""
defmodule Responses do
@moduledoc """
Stores request/response for the recorder.
"""
use GenServer
def start(arg) do
GenServer.start(__MODULE__, arg)
end
def append(pid, x) do
GenServer.cast(pid, {:append, x})
end
def set(pid, x) do
GenServer.cast(pid, {:set, x})
end
def get(pid) do
GenServer.call(pid, :get)
end
def update(pid, finder, updater) do
GenServer.call(pid, {:update, finder, updater})
end
def pop(pid) do
GenServer.call(pid, :pop)
end
# Callbacks
@impl true
def init(arg) do
{:ok, arg}
end
@impl true
def handle_cast({:append, x}, state) do
{:noreply, [x|state]}
end
@impl true
def handle_cast({:set, x}, _state) do
{:noreply, x}
end
@impl true
def handle_call(:get, _from, state) do
{:reply, state, state}
end
@impl true
def handle_call({:update, finder, updater}, _from, state) do
new_state = Enum.map(state, fn(record) ->
if finder.(record) do
updater.(record)
else
record
end
end)
{:reply, new_state, new_state}
end
@impl true
def handle_call(:pop, _from, state) do
case state do
[] -> {:reply, state, state}
[head | tail] -> {:reply, head, tail}
end
end
end
defmodule Options do
@moduledoc """
Stores option parameters for the recorder.
"""
use GenServer
def start(arg) do
GenServer.start(__MODULE__, arg)
end
def set(pid, x) do
GenServer.cast(pid, {:set, x})
end
def get(pid) do
GenServer.call(pid, :get)
end
# Callbacks
@impl true
def init(arg) do
{:ok, arg}
end
@impl true
def handle_cast({:set, x}, _state) do
{:noreply, x}
end
@impl true
def handle_call(:get, _from, state) do
{:reply, state, state}
end
end
defmodule CurrentRecorder do
@moduledoc """
Stores current recorder to be able to fetch it inside of the mocked version of the adapter.
"""
use GenServer
def start_link(_) do
GenServer.start_link(__MODULE__, default_state(), name: __MODULE__)
end
def set(x) do
GenServer.cast(__MODULE__, {:set, x})
end
def get do
GenServer.call(__MODULE__, :get)
end
def default_state(), do: nil
# Callbacks
@impl true
def init(state) do
{:ok, state}
end
@impl true
def handle_cast({:set, x}, _state) do
{:noreply, x}
end
@impl true
def handle_call(:get, _from, state) do
{:reply, state, state}
end
end
end