# double_down v0.61.0 - Table of Contents

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.

## Pages

- Guides
  - [DoubleDown](readme.md)
  - [Boundaries](boundaries.md)
  - [Dispatch](dispatch.md)
  - [Stateful Doubles](stateful-doubles.md)
  - [Double API](double-api.md)
  - [Repo](repo.md)

- About
  - [Changelog](changelog.md)

## Modules

- [DoubleDown.Dispatch.Defer](DoubleDown.Dispatch.Defer.md): A deferred execution marker.
- [DoubleDown.Dispatch.HandlerMeta](DoubleDown.Dispatch.HandlerMeta.md): Structs describing the three handler types that can be installed for
a contract via `DoubleDown.Testing`.
- [DoubleDown.Dispatch.HandlerMeta.Module](DoubleDown.Dispatch.HandlerMeta.Module.md): Handler meta for a module-based implementation.
- [DoubleDown.Dispatch.HandlerMeta.Stateful](DoubleDown.Dispatch.HandlerMeta.Stateful.md): Handler meta for a stateful (4/5-arity) function handler.
- [DoubleDown.Dispatch.HandlerMeta.Stateless](DoubleDown.Dispatch.HandlerMeta.Stateless.md): Handler meta for a stateless 3-arity function handler `(contract, operation, args)`.
- [DoubleDown.Dispatch.Keys](DoubleDown.Dispatch.Keys.md): Centralised NimbleOwnership key helpers for DoubleDown dispatch.
- [DoubleDown.Dispatch.Passthrough](DoubleDown.Dispatch.Passthrough.md): Sentinel value returned from expect responders to delegate to the
fallback/fake instead of returning a result directly.
- [DoubleDown.Dispatch.StatefulHandler](DoubleDown.Dispatch.StatefulHandler.md): Behaviour for stateful fake handler modules.
- [DoubleDown.Dispatch.StatelessHandler](DoubleDown.Dispatch.StatelessHandler.md): Behaviour for stateless stub handler modules.
- [DoubleDown.Dispatch.Types](DoubleDown.Dispatch.Types.md): Shared type definitions for DoubleDown dispatch.
- [DoubleDown.Double.CanonicalHandlerState](DoubleDown.Double.CanonicalHandlerState.md): State for `DoubleDown.Double.canonical_handler/5`.
- [DoubleDown.Double.Dispatch](DoubleDown.Double.Dispatch.md): Dispatch-time logic for `DoubleDown.Double`'s canonical handler.
- [DoubleDown.Double.Types](DoubleDown.Double.Types.md): Shared type definitions for per-operation functions in `DoubleDown.Double`.
- [DoubleDown.DynamicFacade.Cover](DoubleDown.DynamicFacade.Cover.md): Ensures DynamicFacade-shimmed modules retain `:cover` instrumentation.

- Core
  - [DoubleDown.BehaviourFacade](DoubleDown.BehaviourFacade.md): Generates a dispatch facade for a vanilla Elixir `@behaviour` module.
  - [DoubleDown.Contract](DoubleDown.Contract.md): Macro for defining contract behaviours with `defcallback` declarations.
  - [DoubleDown.ContractFacade](DoubleDown.ContractFacade.md): Generates a dispatch facade for a `DoubleDown.Contract`.
  - [DoubleDown.DynamicFacade](DoubleDown.DynamicFacade.md): Dynamic dispatch facades for existing modules.

- Testing
  - [DoubleDown.Double](DoubleDown.Double.md): Mox-style expect/stub handler declarations with immediate effect.
  - [DoubleDown.Log](DoubleDown.Log.md): Log-based expectation matcher for DoubleDown dispatch logs.
  - [DoubleDown.Testing](DoubleDown.Testing.md): Test helpers for DoubleDown contracts.

- Repo
  - [DoubleDown.Repo](DoubleDown.Repo.md): Repo contract for common Ecto Repo operations.
  - [DoubleDown.Repo.InMemory](DoubleDown.Repo.InMemory.md): Stateful in-memory Repo fake (closed-world). **Recommended default.**
  - [DoubleDown.Repo.OpenInMemory](DoubleDown.Repo.OpenInMemory.md): Stateful in-memory Repo fake (open-world).
  - [DoubleDown.Repo.Stateless](DoubleDown.Repo.Stateless.md): Stateless stub for `DoubleDown.Repo`.

- Internals
  - [DoubleDown.Dispatch](DoubleDown.Dispatch.md): Dispatch resolution for DoubleDown contracts.
  - [DoubleDown.Repo.Impl.MultiStepper](DoubleDown.Repo.Impl.MultiStepper.md): Steps through an `Ecto.Multi` without a real database transaction.

## Mix Tasks

- [mix docs.nav](Mix.Tasks.Docs.Nav.md): Injects navigation headers and footers into documentation files.

