Packages

Generators for absinthe to help reduce writing boilerplate

Current section

Files

Jump to
absinthe_generator priv templates absinthe_schema.ex.eex
Raw

priv/templates/absinthe_schema.ex.eex

defmodule <%= Macro.camelize(app_name) %>.Schema do
<%= if moduledoc do %>
@moduledoc "<%= moduledoc %>"
<% else %>
@moduledoc false
<% end %>
use Absinthe.Schema
alias <%= Macro.camelize(app_name) %>.Types
alias <%= Macro.camelize(app_name) %>.Schema.{Mutations, Queries}
# Types<%= for type_module <- types do %>
import_types <%= type_module %><% end %>
# Queries<%= for query <- queries do %>
import_types Queries.<%= Macro.camelize(query) %><% end %>
<%= if Enum.any?(mutations) do %>
# Mutations<%= for mutation <- mutations do %>
import_types Mutations.<%= Macro.camelize(mutation) %><% end %><% end %>
query do
<%= for query <- queries do %>
import_fields :<%= Macro.underscore(query) %>_queries<% end %>
end
<%= if Enum.any?(mutations) do %>
mutation do
<%= for mutation <- mutations do %>
import_fields :<%= Macro.underscore(mutation) %>_mutations<% end %>
end
<% end %>
<%= if Enum.any?(subscriptions) do %>
subscriptions do
<%= for subscription <- subscriptions do %>
import_fields :<%= Macro.underscore(subscription) %>_subscriptions<% end %>
end
<% end %>
<%= if Enum.any?(data_sources) do %>
def context(ctx) do
loader = Dataloader.new()
<%= for data_source <- data_sources do %>
|> Dataloader.add_source(<%= Macro.camelize(data_source.source) %><%= if data_source.query do %>, <%= data_source.query %><% end %>)<% end %>
Map.put(ctx, :loader, loader)
end
<% end %>
<% query_pre_middleware? = Enum.any?(middleware.queries.pre_middleware) %>
<% query_post_middleware? = Enum.any?(middleware.queries.post_middleware) %>
<%= if query_pre_middleware? or query_post_middleware? do %>
def middleware(middleware, _, %{identifier: :query}) do
<%= if query_pre_middleware? do %> [<%= Enum.join(middleware.queries.pre_middleware, ",") %>] ++ <% end %>
middleware
<%= if query_post_middleware? do %> ++ [<%= Enum.join(middleware.queries.post_middleware, ",") %>] <% end %>
end<% end %>
<% mutation_pre_middleware? = Enum.any?(middleware.mutations.pre_middleware) %>
<% mutation_post_middleware? = Enum.any?(middleware.mutations.post_middleware) %>
<%= if mutation_pre_middleware? or mutation_post_middleware? do %>
def middleware(middleware, _, %{identifier: :mutation}) do
<%= if mutation_pre_middleware? do %> [<%= Enum.join(middleware.mutations.pre_middleware, ",") %>] ++ <% end %>
middleware
<%= if mutation_post_middleware? do %> ++ [<%= Enum.join(middleware.mutations.post_middleware, ",") %>] <% end %>
end <% end %>
<% subscription_pre_middleware? = Enum.any?(middleware.subscriptions.pre_middleware) %>
<% subscription_post_middleware? = Enum.any?(middleware.subscriptions.post_middleware) %>
<%= if subscription_pre_middleware? or subscription_post_middleware? do %>
def middleware(middleware, _, %{identifier: :subscription}) do
<%= if subscription_pre_middleware? do %> [<%= Enum.join(middleware.subscriptions.pre_middleware, ",") %>] ++ <% end %>
middleware
<%= if subscription_post_middleware? do %> ++ [<%= Enum.join(middleware.subscriptions.post_middleware, ",") %>] <% end %>
end<% end %>
<% all_pre_middleware? = Enum.any?(middleware.all.pre_middleware) %>
<% all_post_middleware? = Enum.any?(middleware.all.post_middleware) %>
<%= if all_pre_middleware? and all_post_middleware? do %>
def middleware(middleware, _, _) do
<%= if all_pre_middleware? do %> [<%= Enum.join(middleware.all.pre_middleware, ",") %>] ++ <% end %>
middleware
<%= if all_post_middleware? do %> ++ [<%= Enum.join(middleware.all.post_middleware, ",") %>]<% end %>
end
<% end %>
def plugins do
[Absinthe.Middleware.Dataloader | Absinthe.Plugin.defaults()]
end
end