ex-scopes/lib/csys/environ.ex

35 lines
730 B
Elixir

defmodule Scopes.CSys.Environ do
use Agent
def create(parent, progs \\ %{}) do
{:ok, env} = Agent.start_link( fn -> {parent, progs} end, name: __MODULE__)
env
end
def get_prog(env, name) do
Agent.get(env, fn {_parent, progs} ->
progs[name]
end)
end
def get_stage(env, prog, stage) do
Agent.get(env, fn {_parent, progs} ->
stages = progs[prog]
stages[stage] || stages[:default]
end)
end
def put_prog(env, name, prog) do
Agent.update(env, fn {parent, progs} ->
{parent, Map.put(progs, name, prog)}
end)
end
def notify(env, msg) do
Agent.cast(env, fn state ->
{parent, _progs} = state
send(parent, msg)
state
end)
end
end