Ver Fonte

Allow reset of all tracked GenServers

Tim Buchwaldt há 7 anos atrás
pai
commit
0fe22f5adf
3 ficheiros alterados com 18 adições e 4 exclusões
  1. 3 3
      lib/gen_reset.ex
  2. 14 0
      lib/gen_reset/gen_reset_tracker.ex
  3. 1 1
      test/gen_reset_test.exs

+ 3 - 3
lib/gen_reset.ex

@@ -7,12 +7,12 @@ defmodule GenReset do
 
   defmacro __using__(_args) do
     quote do
-      def handle_info(:"$gen_reset", state) do
+      def handle_call(:"$gen_reset", _from, state) do
         case init(:erlang.get(:"$gen_reset_initial_args")) do
           {:ok, state} ->
-            {:noreply, state}
+            {:reply, :ok, state}
           {:ok, state, continue} ->
-            {:noreply, state, continue}
+            {:reply, :ok, state, continue}
         end
       end
 

+ 14 - 0
lib/gen_reset/gen_reset_tracker.ex

@@ -23,6 +23,10 @@ defmodule GenReset.Tracker do
     GenServer.call(__MODULE__, :pids)
   end
 
+  def reset do
+    GenServer.call(__MODULE__, :reset)
+  end
+
   def internal_reset do
     GenServer.call(__MODULE__, :internal_reset)
   end
@@ -36,11 +40,21 @@ defmodule GenReset.Tracker do
     {:reply, :ok, state -- [pid]}
   end
 
+  def handle_call(:reset, _from, state) do
+    IO.inspect(state)
+    for pid <- state do
+      IO.puts "resetting server"
+      IO.inspect(pid)
+      GenServer.call(pid, :"$gen_reset")
+    end
+  end
+
 
   def handle_call(:pids, _from, state), do: {:reply, state, state}
 
   def handle_call(:internal_reset, _from, _state), do: {:reply, :ok, []}
 
+
   def handle_info({:DOWN, _ref, :process, object, _reason}, state) do
     {:noreply, state -- [object]}
   end

+ 1 - 1
test/gen_reset_test.exs

@@ -7,7 +7,7 @@ defmodule GenResetTest do
   	GenServer.cast(pid, {:set, :foo})
   	assert GenServer.call(pid, :state) == :foo
 
-  	send(pid, :"$gen_reset")
+		GenServer.call(pid, :"$gen_reset")
   	assert GenServer.call(pid, :state) == :fresh_state
   end
 end