Packages
double_down
0.60.4
0.69.0
0.68.0
0.66.0
0.65.0
0.64.1
0.64.0
0.63.3
0.63.2
0.63.1
0.63.0
0.62.1
0.61.0
0.60.4
0.60.3
0.60.2
0.60.1
0.60.0
0.59.0
0.58.0
0.57.0
0.56.1
0.56.0
0.55.0
0.54.0
0.53.0
0.52.3
0.52.2
0.52.1
0.52.0
0.51.0
0.50.1
0.50.0
0.49.0
0.48.1
0.48.0
0.47.2
0.47.1
0.47.0
0.46.3
0.46.2
0.46.1
0.46.0
0.45.0
0.44.0
0.43.0
0.42.0
0.41.1
0.41.0
0.40.0
0.39.0
0.38.0
0.37.2
0.37.0
0.35.0
0.34.0
0.33.0
0.32.0
0.31.1
0.31.0
0.30.1
0.30.0
0.29.0
0.28.1
0.28.0
0.27.0
0.26.0
0.24.0
Builds on the Mox pattern — generates behaviours and dispatch facades from `defcallback` declarations — and adds stateful test doubles powerful enough to test Ecto.Repo operations without a database.
Current section
Files
Jump to
Current section
Files
lib/double_down/contract/dispatch/keys.ex
defmodule DoubleDown.Contract.Dispatch.Keys do
@moduledoc """
Centralised NimbleOwnership key helpers for DoubleDown dispatch.
All test-time state is stored in a single `NimbleOwnership` GenServer
keyed by atoms derived from the contract module. This module provides
the canonical key-generation functions so that `Dispatch`, `Double`,
and `Testing` all agree on the key scheme.
## Key scheme
| Key | Function | Purpose |
|-----|----------|---------|
| `ownership_server/0` | Server name | The `NimbleOwnership` GenServer registered name |
| contract module atom | (no function) | Handler meta + inline state for stateful handlers |
| `log_key/1` | Per-contract | Accumulated `{contract, op, args, result}` call log |
| `contracts_key/0` | Global | Set of contracts with active `Double` expects |
"""
@doc """
The registered name of the NimbleOwnership GenServer.
"""
@spec ownership_server() :: atom()
def ownership_server, do: DoubleDown.Contract.Dispatch.Ownership
@doc """
NimbleOwnership key for a contract's dispatch call log.
"""
@spec log_key(module()) :: atom()
def log_key(contract), do: Module.concat(DoubleDown.Log, contract)
@doc """
NimbleOwnership key for the set of contracts with active `Double` expects/stubs.
"""
@spec contracts_key() :: atom()
def contracts_key, do: DoubleDown.Double.Contracts
end