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} -> progs[prog][stage] 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