Packages
ecto_watch
0.3.0
1.1.0
1.0.0
0.15.1
0.15.0
0.14.0
0.13.3
0.13.2
0.13.1
0.13.0
0.12.6
0.12.5
0.12.4
0.12.3
0.12.2
0.12.1
0.12.0
0.11.2
0.11.1
0.11.0
0.10.0
0.9.11
0.9.10
0.9.9
0.9.8
0.9.7
0.9.6
0.9.5
0.9.4
0.9.3
0.9.2
0.9.1
0.9.0
0.8.1
0.8.0
0.7.0
0.6.0
0.6.0-rc2
0.6.0-rc1
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
EctoWatch allows you to easily get Phoenix.PubSub notifications directly from postgresql.
Current section
Files
Jump to
Current section
Files
lib/ecto_watch/options.ex
defmodule EctoWatch.Options do
alias EctoWatch.WatcherOptions
defstruct [:repo_mod, :pub_sub_mod, :watchers]
def new(opts) do
%__MODULE__{
repo_mod: opts[:repo],
pub_sub_mod: opts[:pub_sub],
watchers: Enum.map(opts[:watchers], &WatcherOptions.new/1)
}
end
def validate(opts) do
schema = [
repo: [
type: {:custom, __MODULE__, :check_valid_repo_module, []},
required: true
],
pub_sub: [
type: {:custom, __MODULE__, :check_valid_pubsub_module, []},
required: true
],
watchers: [
type: {:custom, WatcherOptions, :validate_list, []},
required: true
]
]
NimbleOptions.validate(opts, schema)
end
def check_valid_repo_module(repo_mod) when is_atom(repo_mod) do
if repo_mod in Ecto.Repo.all_running() do
{:ok, repo_mod}
else
{:error, "#{inspect(repo_mod)} was not a currently running ecto repo"}
end
end
def check_valid_repo_module(repo), do: {:error, "#{inspect(repo)} was not an atom"}
def check_valid_pubsub_module(pubsub_mod) when is_atom(pubsub_mod) do
Phoenix.PubSub.node_name(pubsub_mod)
{:ok, pubsub_mod}
rescue
_ -> {:error, "#{inspect(pubsub_mod)} was not a currently running Phoenix PubSub module"}
end
def check_valid_pubsub_module(repo), do: {:error, "#{inspect(repo)} was not an atom"}
end