Current section
Files
Jump to
Current section
Files
lib/mix/tasks/ecto_resource/resources.ex
defmodule Mix.Tasks.EctoResource.Resources do
@moduledoc """
Task to list the resources defined by `EctoResource` within a context module.
$ mix ecto_resource.resources MyApp.MyContext
"""
use Mix.Task
require Logger
@shortdoc "List generated resource functions for context"
def run([]) do
Logger.error("""
This task must be called with a context that uses `EctoResource`
$ mix engine.resources MyApp.MyContext
""")
end
def run(contexts) do
Mix.Task.run("compile", [])
Enum.each(contexts, &print_context/1)
end
defp print_context(context) do
context
|> resources()
|> Enum.each(fn {repo, resource, functions} ->
Logger.info("""
Within the context #{context}, the following resource functions have been generated:
#{resource} using the repo #{repo}:
#{format_functions(context, functions)}
""")
end)
end
defp format_functions(context, functions) do
functions
|> Enum.map(fn f -> "- #{context}.#{f}" end)
|> Enum.join("\n")
end
defp resources(context) do
context_module = Module.concat([context])
context_module.__resource__(:resources)
end
end