Current section
Files
Jump to
Current section
Files
lib/work_processor.ex
defmodule Retryable.WorkProcessor do
use GenServer
alias Retryable.Work
def start_link(manager) do
GenServer.start_link(__MODULE__, manager, [])
end
def init(manager) do
send(self(), :loop)
{:ok, manager}
end
def handle_info(:loop, manager) do
case GenServer.call(manager, :retrieve_work) do
{:job, work} -> process_work(work)
:nothing -> :timer.sleep(10)
end
send(self(), :loop)
{:noreply, manager}
end
defp process_work(work) do
work
|> Work.started
|> Work.process
end
end