Current section
Files
Jump to
Current section
Files
lib/fawkes.ex
defmodule Fawkes do
@moduledoc """
"""
use Supervisor
alias Fawkes.EventProducer
alias Fawkes.EventProcessor
def start_link(opts) do
name = opts[:name] || raise ArgumentError, "Fawkes requires `:name`"
Supervisor.start_link(__MODULE__, opts, name: name)
end
def init(opts) do
# TODO - Validate all of this with Norm.
name = opts[:name]
handlers = opts[:handlers] || []
{adapter, adapter_args} = opts[:adapter] || raise ArgumentError, "Fawkes requires :adapter"
event_handlers = for {handler, init} <- handlers do
Supervisor.child_spec(
{EventProcessor, [producer: producer_name(name), handler: {handler, init}]},
id: :"fawkes_event_processor_#{handler}"
)
end
pipeline = [{EventProducer, name: producer_name(name)} | event_handlers]
children = pipeline ++ [
{adapter, Keyword.put(adapter_args, :producer, producer_name(name))}
]
Supervisor.init(children, strategy: :one_for_one)
end
defp producer_name(name) do
:"#{name}.EventProducer"
end
end