Current section

Files

Jump to
nimble_template lib nimble_template addons addon.ex
Raw

lib/nimble_template/addons/addon.ex

defmodule NimbleTemplate.Addons.Addon do
@moduledoc false
alias __MODULE__
alias NimbleTemplate.Projects.Project
@callback apply(%Project{}, %{}) :: %Project{}
@callback do_apply(%Project{}, %{}) :: %Project{}
defmacro __using__(opts) do
quote location: :keep, bind_quoted: [opts: opts] do
@behaviour Addon
import NimbleTemplate.GithubHelper, only: [has_github_wiki_directory?: 0]
alias NimbleTemplate.Generator
alias NimbleTemplate.Hex.Package
alias NimbleTemplate.Projects.Project
alias NimbleTemplate.ProjectHelper
def apply(%Project{} = project, opts \\ %{}) when is_map(opts) do
Generator.info_log("* applying ", inspect(__MODULE__))
project
|> do_apply(opts)
|> ProjectHelper.append_installed_addon(__MODULE__)
end
def do_apply(%Project{} = project, opts) when is_map(opts), do: project
defp latest_package_version(package) do
"~> " <> Package.get_latest_version(package)
end
defoverridable do_apply: 2
end
end
end