lib/remote.ex

defmodule NodeRegistry.Remote do
  @moduledoc """
    Defines remote/4 function to call a function on a remote node.
  """

  @spec remote(atom(), module(), atom(), list()) :: any() | no_return()
  def remote(name, mod, fun, args) do
    case NodeRegistry.random_node_with_prefix(name) do
      nil ->
        raise "No node with prefix #{name} found"

      node ->
        :rpc.call(node, mod, fun, args)
    end
  end
end