Packages
rambla
0.16.3
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/connections/process.ex
defmodule Rambla.Process do
@moduledoc """
Default connection implementation for 🕸️ Process message callback.
For instance, this call would send a message back to the calling process.
```elixir
Rambla.publish(
Rambla.Process,
%{method: :post, body: %{message: "I ❤ HTTP"}}
}
```
"""
@behaviour Rambla.Connection
@impl Rambla.Connection
def connect(params) when is_list(params) do
# [AM] shall we monitor the calling process here?
{process, params} = Keyword.pop(params, :callback, self())
%Rambla.Connection{
conn: %Rambla.Connection.Config{conn: process, opts: Map.new(params)},
conn_type: __MODULE__,
conn_pid: self()
}
end
@impl Rambla.Connection
def publish(
%Rambla.Connection.Config{conn: process, opts: payload},
%{__action__: :call} = message
),
do: GenServer.call(process, cleanup(message, payload))
@impl Rambla.Connection
def publish(
%Rambla.Connection.Config{conn: process, opts: payload},
%{__action__: :cast} = message
),
do: GenServer.cast(process, cleanup(message, payload))
@impl Rambla.Connection
def publish(%Rambla.Connection.Config{opts: payload}, %{__action__: pid} = message)
when is_pid(pid),
do: send(pid, cleanup(message, payload))
@impl Rambla.Connection
def publish(%Rambla.Connection.Config{conn: process} = conn, %{__action__: :info} = message),
do: publish(conn, Map.put(message, :__action__, process))
@impl Rambla.Connection
def publish(%Rambla.Connection.Config{} = conn, message),
do: publish(conn, Map.put(message, :__action__, :info))
@spec cleanup(map(), any()) :: map()
defp cleanup(message, payload),
do: %{message: Map.delete(message, :__action__), payload: payload}
end