36 lines
756 B
Elixir
36 lines
756 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} ->
|
|
#progs[prog][stage]
|
|
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
|