aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorlthms <contact@thomasletan.fr>2017-12-29 21:35:37 +0000
committerThomas Letan <contact@thomasletan.fr>2018-01-24 08:11:28 +0100
commit9a4c3f6b2776fedda69d0b6c16e08882d4aa4430 (patch)
treeb1ad8e57ebdbb4258a01e9ee2256f37eab3de789
parentpuppeteer: Puppeteers now get digests from Instance they register to (diff)
puppeteer: The digests now contain the entities key
-rw-r--r--lib/lkn/core/instance.ex10
-rw-r--r--lib/lkn/core/puppeteer.ex19
-rw-r--r--test/core_test.exs2
3 files changed, 23 insertions, 8 deletions
diff --git a/lib/lkn/core/instance.ex b/lib/lkn/core/instance.ex
index 2b42c01..5372f0f 100644
--- a/lib/lkn/core/instance.ex
+++ b/lib/lkn/core/instance.ex
@@ -288,10 +288,16 @@ defmodule Lkn.Core.Instance do
# we compute a digest of the map and each puppets
map = Lkn.Core.Entity.digest(state.map_key)
- puppets = Enum.map(state.puppets, &Lkn.Core.Entity.digest(&1))
+ puppets = Enum.reduce(state.puppets, Map.new(), &Map.put(&2, &1, Lkn.Core.Entity.digest(&1)))
# we send these digest to our new friend the puppeteer
- Lkn.Core.Puppeteer.instance_digest(puppeteer_key, state.instance_key, map, puppets)
+ Lkn.Core.Puppeteer.instance_digest(
+ puppeteer_key,
+ state.instance_key,
+ state.map_key,
+ map,
+ puppets
+ )
{:reply, true, s2}
else
diff --git a/lib/lkn/core/puppeteer.ex b/lib/lkn/core/puppeteer.ex
index f362c4f..996c78b 100644
--- a/lib/lkn/core/puppeteer.ex
+++ b/lib/lkn/core/puppeteer.ex
@@ -127,9 +127,9 @@ defmodule Lkn.Core.Puppeteer do
{:noreply, state}
end
end
- def handle_cast({:instance_digest, instance_key, map, puppets}, state) do
+ def handle_cast({:instance_digest, instance_key, map_key, map, puppets}, state) do
if state.instance_key == Lkn.Prelude.Option.some(instance_key) do
- s2 = instance_digest(state.state, instance_key, map, puppets)
+ s2 = instance_digest(state.state, instance_key, map_key, map, puppets)
{:noreply, %State{state|state: s2}}
else
{:noreply, state}
@@ -192,7 +192,13 @@ defmodule Lkn.Core.Puppeteer do
@callback puppet_enter(s :: state, instance_key :: Lkn.Core.Instance.k, puppet_key :: Lkn.Core.Puppet.k, digest :: Lkn.Core.Entity.digest) :: state
@callback puppet_leave(s :: state, instance_key :: Lkn.Core.Instance.k, puppet_key :: Lkn.Core.Puppet.k) :: state
@callback destroy(puppeteer_key :: k, s :: state, instance_key :: Option.t(Lkn.Core.Instance.k), reason :: any) :: term
- @callback instance_digest(s :: state, instance_key :: Lkn.Core.Instance, map :: Lkn.Core.Entity.digest, puppets :: Lkn.Core.Entity.digest) :: state
+ @callback instance_digest(
+ s :: state,
+ instance_key :: Lkn.Core.Instance,
+ map_key :: Lkn.Core.Map.k,
+ map :: Lkn.Core.Entity.digest,
+ puppets :: %{Lkn.Core.Puppet.k => Lkn.Core.Entity.digest}
+ ) :: state
@spec leave_instance(k, Instance.k) :: :ok
def leave_instance(puppeteer_key, instance_key) do
@@ -204,14 +210,17 @@ defmodule Lkn.Core.Puppeteer do
GenServer.call(Name.puppeteer(puppeteer_key), {:find_instance, map_key})
end
- def instance_digest(puppeteer_key, instance_key, map, puppets) do
- GenServer.cast(Name.puppeteer(puppeteer_key), {:instance_digest, instance_key, map, puppets})
+ @doc false
+ def instance_digest(puppeteer_key, instance_key, map_key, map, puppets) do
+ GenServer.cast(Name.puppeteer(puppeteer_key), {:instance_digest, instance_key, map_key, map, puppets})
end
+ @doc false
def puppet_enter(puppeteer_key, instance_key, puppet_key, digest) do
GenServer.cast(Name.puppeteer(puppeteer_key), {:puppet_enter, instance_key, puppet_key, digest})
end
+ @doc false
def puppet_leave(puppeteer_key, instance_key, puppet_key) do
GenServer.cast(Name.puppeteer(puppeteer_key), {:puppet_leave, instance_key, puppet_key})
end
diff --git a/test/core_test.exs b/test/core_test.exs
index 7263d15..a65ff45 100644
--- a/test/core_test.exs
+++ b/test/core_test.exs
@@ -516,7 +516,7 @@ defmodule Test.Puppeteer do
{:ok, s}
end
- def instance_digest(state, _instance_key, map, puppets) do
+ def instance_digest(state, _instance_key, map_key, _map, _puppets) do
state
end