Current section

Files

Jump to
rondo lib rondo.ex
Raw

lib/rondo.ex

defmodule Rondo do
alias Rondo.Application
alias Rondo.Element
def create_application(element) when is_atom(element) do
element
|> Element.el()
|> create_application()
end
def create_application(element) do
element
|> Application.init()
end
def create_application(element, props) when is_atom(element) do
element
|> Element.el(props)
|> create_application()
end
def submit_action(app, store, ref, data) do
case Rondo.Application.prepare_action(app, ref, data) do
{:invalid, errors, app} ->
{:invalid, errors, app, store}
{:ok, descriptors, app} ->
case apply_descriptors(descriptors, store) do
{:ok, store} ->
{:ok, app, store}
{:error, error, store} ->
{:error, error, app, store}
end
end
end
defp apply_descriptors([], store) do
{:ok, store}
end
defp apply_descriptors([{descriptor, update_fn} | descriptors], store) do
case Rondo.State.Store.handle_action(store, descriptor, update_fn) do
{:ok, store} ->
apply_descriptors(descriptors, store)
{:error, error, store} ->
{:error, error, store}
end
end
end