Packages
exvcr
0.10.3
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/mock_lock.ex
defmodule ExVCR.MockLock do
use ExActor.GenServer, export: :mock_lock
@ten_milliseconds 10
defstart start() do
initial_state(%{lock_holder: nil})
end
def ensure_started do
unless Process.whereis(:mock_lock) do
__MODULE__.start
end
end
defcast request_lock(caller_pid, test_pid) do
Process.send(self(), {:do_request_lock, caller_pid, test_pid}, [])
noreply()
end
defhandleinfo {:do_request_lock, caller_pid, test_pid}, state: state do
if Map.get(state, :lock_holder) do
Process.send_after(self(), {:do_request_lock, caller_pid, test_pid}, @ten_milliseconds)
noreply()
else
Process.monitor(test_pid)
Process.send(caller_pid, :lock_granted, [])
state
|> Map.put(:lock_holder, caller_pid)
|> new_state
end
end
defhandleinfo {:DOWN, _ref, :process, pid, _}, state: state do
if state.lock_holder == pid do
state
|> Map.put(:lock_holder, nil)
|> new_state
else
noreply()
end
end
defcall release_lock(), state: state do
state
|> Map.put(:lock_holder, nil)
|> set_and_reply(:ok)
end
end