Packages
riptide
0.3.3
0.5.2
0.5.1
0.5.0-beta9
0.5.0-beta8
0.5.0-beta7
0.5.0-beta6
0.5.0-beta5
0.5.0-beta4
0.5.0-beta3
0.5.0-beta2
0.5.0-beta11
0.5.0-beta10
0.5.0-beta
0.4.6
0.4.5
0.4.4
0.4.3
0.4.2
0.4.1
0.4.0
0.3.13
0.3.12
0.3.11
0.3.10
0.3.9
0.3.8
0.3.7
0.3.6
0.3.5
0.3.4
0.3.3
0.3.2
0.3.1
0.3.0
0.3.0-bd63a38
0.2.79
0.2.78
0.2.74
0.2.4
0.2.3
0.2.2
0.2.1
0.2.0
0.1.15
0.1.14
0.1.13
0.1.12
0.1.11
0.1.10
0.1.9
0.1.8
0.1.7
0.1.6
0.1.5
0.1.4
0.1.3
0.1.2
0.1.1
0.1.0
A data first framework for building realtime applications
Current section
Files
Jump to
Current section
Files
lib/riptide.ex
defmodule Riptide do
@moduledoc false
@internal %{internal: true}
use Supervisor
def start_link(opts \\ %{}) do
Supervisor.start_link(__MODULE__, opts, name: __MODULE__)
end
def init(opts) do
opts = Enum.into(opts, %{})
Riptide.Store.init()
Riptide.Migration.run()
Supervisor.init(
[
{Riptide.Scheduler, []},
{Riptide.Websocket.Server, opts}
],
strategy: :one_for_one
)
end
def query(query, state \\ @internal) do
with :ok <- Riptide.Interceptor.query_before(query, state) do
case Riptide.Interceptor.query_resolve(query, state) do
nil -> {:ok, Riptide.Store.query(query)}
result -> {:ok, result}
end
end
end
def stream(path, opts \\ %{}, state \\ @internal) do
query = Dynamic.put(%{}, path, opts)
with :ok <- Riptide.Interceptor.query_before(query, state) do
Riptide.Store.stream(path, opts)
end
end
def query_path!(path, opts \\ %{}, state \\ @internal) do
{:ok, result} = query_path(path, opts, state)
result
end
def query_path(path, opts \\ %{}, state \\ @internal) do
case query(Dynamic.put(%{}, path, opts), state) do
{:ok, result} -> {:ok, Dynamic.get(result, path)}
result -> result
end
end
def mutation!(mut) do
case mutation(mut) do
{:ok, result} -> result
end
end
def mutation!(mut, state) do
case mutation(mut, state) do
{:ok, result} -> result
end
end
def mutation(mut), do: mutation(mut, %{internal: true})
def mutation(mut, state) do
with {:ok, prepared} <- Riptide.Interceptor.mutation_before(mut, state),
prepared <- Riptide.Interceptor.mutation_effect(prepared, state),
:ok <- Riptide.Subscribe.broadcast_mutation(prepared),
:ok <- Riptide.Store.mutation(prepared),
:ok <- Riptide.Interceptor.mutation_after(prepared, state) do
{:ok, prepared}
end
end
def merge(path, value), do: mutation(Riptide.Mutation.merge(path, value))
def merge(path, value, state), do: mutation(Riptide.Mutation.merge(path, value), state)
def merge!(path, value) do
{:ok, result} = mutation(Riptide.Mutation.merge(path, value))
result
end
def merge!(path, value, state) do
{:ok, result} = mutation(Riptide.Mutation.merge(path, value), state)
result
end
def delete(path), do: mutation(Riptide.Mutation.delete(path))
def delete(path, state), do: mutation(Riptide.Mutation.delete(path), state)
def delete!(path) do
{:ok, result} = mutation(Riptide.Mutation.delete(path))
result
end
def delete!(path, state) do
{:ok, result} = mutation(Riptide.Mutation.delete(path), state)
result
end
end