Current section
Files
Jump to
Current section
Files
lib/kiln/builders/application.ex
defmodule Kiln.Builders.Application do
require Logger
alias Kiln.Builders.Application, as: Builder
alias Kiln.Utils
def get_router(caller, opts) do
Utils.option_or_mod_replace(caller, opts, :router)
end
def get_repo(caller, opts) do
Utils.option_or_mod_replace(caller, opts, :repo)
end
def get_name(caller, opts) do
if opts[:name] do
opts[:name]
else
Utils.atom_name(caller)
end
end
def get_port(name, opts) do
Utils.option_or_config(name, opts, :port, 8000)
end
def build_server(caller, opts, port) do
router = Builder.get_router(caller, opts)
{Plug.Cowboy,
scheme: :http, plug: router, options: [port: port, compress: true]}
end
def build_children(caller, opts, port) do
repo = Builder.get_repo(caller, opts)
server = Builder.build_server(caller, opts, port)
extra = Keyword.get(opts, :extra_children, [])
[repo, server | extra]
end
def build_link(caller, opts, port) do
children = Builder.build_children(caller, opts, port)
supervisor = Utils.replace_module(caller, "Supervisor")
Supervisor.start_link(children,
strategy: :one_for_one,
name: supervisor
)
end
def start(caller, opts) do
name = Builder.get_name(caller, opts)
port = Builder.get_port(name, opts)
link = Builder.build_link(caller, opts, port)
Logger.info("#{name} started on port #{port}")
link
end
end