Current section
Files
Jump to
Current section
Files
lib/kiln/handler.ex
defmodule Kiln.Handler do
alias Kiln.Builders.Handler, as: Builder
alias Kiln.Utils
defmacro new_item(controller, opts) do
quote do
def new(conn) do
Builder.new_item(conn, unquote(controller), unquote(opts))
end
end
end
defmacro get_items(controller, opts) do
quote do
def get(conn) do
Builder.get_items(conn, unquote(controller), unquote(opts))
end
end
end
defmacro show_item(controller, opts) do
quote do
def show(conn, id) do
Builder.show_item(conn, unquote(controller), id, unquote(opts))
end
end
end
defmacro edit_item(controller, opts) do
quote do
def edit(conn, id) do
Builder.edit_item(conn, unquote(controller), id, unquote(opts))
end
end
end
defmacro delete_item(controller, opts) do
quote do
def delete(conn, id) do
Builder.delete_item(conn, unquote(controller), id, unquote(opts))
end
end
end
defmacro __using__(opts \\ []) do
quote do
import Kiln.Handler
alias Kiln.Responses.{ErrorResponse, Raw, Response}
@opts unquote(opts)
@caller unquote(__CALLER__.module)
@name Utils.atom_name(@caller)
@controller Utils.option_or_mod_replace(
@caller,
unquote(opts),
:controller,
Controllers
)
@auth_kind Utils.option_or_config(@name, unquote(opts), :auth_kind, :user)
@class Keyword.get(unquote(opts), :class, nil)
@page_items Utils.option_or_config(@name, unquote(opts), :page_items, 20)
@response_type Utils.option_or_config(
@name,
unquote(opts),
:response_type,
:siren
)
@response_opts %{
auth_kind: @auth_kind,
class: @class,
page_items: @page_items,
response_type: @response_type
}
end
end
end