diff options
author | lthms <contact@thomasletan.fr> | 2017-12-29 21:35:37 +0000 |
---|---|---|
committer | Thomas Letan <contact@thomasletan.fr> | 2018-01-24 08:11:28 +0100 |
commit | 9a4c3f6b2776fedda69d0b6c16e08882d4aa4430 (patch) | |
tree | b1ad8e57ebdbb4258a01e9ee2256f37eab3de789 | |
parent | puppeteer: 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.ex | 10 | ||||
-rw-r--r-- | lib/lkn/core/puppeteer.ex | 19 | ||||
-rw-r--r-- | test/core_test.exs | 2 |
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 |