Packages
rambla
1.1.4
1.5.0
1.4.2
1.4.1
1.4.0
1.3.0
1.2.6
1.2.5
1.2.4
1.2.3
1.2.2
1.2.1
1.2.0
1.1.5
1.1.4
1.1.3
1.1.2
1.1.1
1.1.0
1.0.1
1.0.0
0.16.6
0.16.5
0.16.4
0.16.3
0.16.2
0.16.1
0.16.0
0.15.0
0.14.4
0.14.3
0.14.2
0.14.1
0.14.0
0.13.1
0.13.0
0.12.2
0.12.1
0.11.1
0.11.0
0.10.0
0.9.3
0.9.2
0.9.1
0.9.0
0.8.4
0.8.3
0.8.2
0.8.1
0.8.0
0.7.0
0.6.5
0.6.4
0.6.3
0.6.2
0.6.1
0.6.0
0.5.5
0.5.4
0.5.3
0.5.2
0.5.1
0.5.0
0.4.0
0.3.0
0.2.0
0.1.0
Easy publishing to many different targets. Supported back-ends: - Rabbit [Amqp](https://hexdocs.pm/amqp/) - Redis [Redix](https://hexdocs.pm/redix) - Http [:httpc](http://erlang.org/doc/man/httpc.html) - Smtp [:gen_smtp](https://hexdocs.pm/gen_smtp) - Slack [Envío](https://hexdocs.pm/envio)
Current section
Files
Jump to
Current section
Files
lib/rambla/handlers/mock.ex
if :mock in Rambla.services() do
Code.ensure_compiled!(Mox)
defmodule Rambla.Handlers.Mock do
@moduledoc """
Default handler for _Mock_ testing doubles.
Normally, the `test.exs` config would have included all the channels
under `config :rambla, mock: […]` key. This would allow testing actual
interactions using `Mox` library.
By default it’d be simply send the message back to the caller.
```elixir
config :rambla, mock: [
connections: [mocked: :conn],
channels: [chan_0: [connection: :mocked]]
]
# Then you can access the connection/channel explicitly via `Rambla.Handlers.Mock`
# or implicitly via `Rambla` as
Rambla.publish(:chan_0, %{message: %{foo: 42}, serializer: Jason})
Rambla.Handlers.Mock.publish(:chan_0, %{message: %{foo: 42}, serializer: Jason})
```
"""
use Rambla.Handler
@callback on_publish(name :: atom(), message :: any(), options :: map()) ::
Rambla.Handler.resolution()
@impl Rambla.Handler
@doc false
def handle_publish(%{message: message} = payload, %{connection: %{channel: name}} = state) do
options = extract_options(payload, state)
{mock, options} = Map.pop(options, :mock, Rambla.Mocks.Generic)
do_handle_publish(mock, name, message, options)
end
def handle_publish(callback, %{connection: %{channel: name}} = state)
when is_function(callback, 1) do
options = extract_options(%{}, state)
callback.({name, options})
end
def handle_publish(payload, state), do: handle_publish(%{message: payload}, state)
@impl Rambla.Handler
@doc false
def config, do: Application.get_env(:rambla, :mock)
def do_handle_publish(mock, name, message, options) do
mock.on_publish(name, message, options)
end
end
end