Current section

Files

Jump to
pow mix.exs
Raw

mix.exs

defmodule Pow.MixProject do
use Mix.Project
@version "0.1.0-alpha.7"
def project do
[
app: :pow,
version: @version,
elixir: "~> 1.6",
elixirc_paths: elixirc_paths(Mix.env(), optional_deps()),
start_permanent: Mix.env() == :prod,
compilers: compilers(optional_deps()),
deps: deps(),
# Hex
description: "Powerful user authentication solution",
package: package(),
# Docs
name: "Pow",
docs: docs()
]
end
def application do
[
extra_applications: extra_applications(Mix.env),
mod: {Pow.Application, []}
]
end
defp extra_applications(:test), do: [:ecto, :logger]
defp extra_applications(_), do: [:logger]
defp deps do
[
{:ecto, "~> 2.2.0", optional: true},
{:phoenix, "~> 1.3.0", optional: true},
{:plug, ">= 1.5.0 and < 1.7.0", optional: true},
{:phoenix_html, "~> 2.11.0", only: [:dev, :test]},
{:phoenix_ecto, "~> 3.3.0", only: [:dev, :test]},
{:credo, "~> 0.9.3", only: [:dev, :test]},
{:ex_doc, "~> 0.19.0", only: :dev},
{:postgrex, ">= 0.0.0", only: [:test]},
]
end
def elixirc_paths(:test, _optional_deps), do: ["lib", "test/support"]
def elixirc_paths(_, optional_deps) do
case optional_deps_missing?(optional_deps) do
true -> paths_without_missing_optional_deps(optional_deps)
false -> ["lib"]
end
end
def compilers(optional_deps) do
case phoenix_missing?(optional_deps) do
true -> [:phoenix] ++ Mix.compilers
_ -> Mix.compilers()
end
end
defp phoenix_missing?(optional_deps) do
Keyword.get(optional_deps, :phoenix)
end
defp optional_deps_missing?(optional_deps) do
not Enum.empty?(optional_deps_missing(optional_deps))
end
defp optional_deps_missing(optional_deps) do
Enum.reject(optional_deps, &elem(&1, 1))
end
defp optional_deps do
for dep <- [:phoenix, :ecto, :plug] do
case Mix.ProjectStack.peek() do
%{config: config} -> {dep, Keyword.has_key?(config[:deps], :phoenix)}
_ -> {dep, true}
end
end
end
defp paths_without_missing_optional_deps(optional_deps) do
deps = optional_deps_missing(optional_deps)
"lib/**/*.ex"
|> Path.wildcard()
|> Enum.reject(&reject_deps_path?(deps, &1))
end
defp reject_deps_path?(deps, path) do
Enum.any?(deps, &String.contains?(path, "/#{elem(&1, 0)}"))
end
defp package do
[
maintainers: ["Dan Shultzer"],
licenses: ["MIT"],
links: %{github: "https://github.com/danschultzer/pow"},
files: ~w(lib LICENSE mix.exs README.md)
]
end
defp docs do
[
source_ref: "v#{@version}",
main: "Pow",
canonical: "http://hexdocs.pm/pow",
source_url: "https://github.com/danschultzer/pow",
extras: [
"README.md": [filename: "Pow", title: "Pow"],
"COHERENCE_MIGRATION.md": [filename: "CoherenceMigration", title: "Migrating from Coherence"],
"lib/extensions/email_confirmation/README.md": [filename: "PowEmailConfirmation", title: "PowEmailConfirmation"],
"lib/extensions/persistent_session/README.md": [filename: "PowPersistentSession", title: "PowPersistentSession"],
"lib/extensions/reset_password/README.md": [filename: "PowResetPassword", title: "PowResetPassword"]],
groups_for_modules: [
"Plug": ~r/^Pow.Plug/,
"Ecto": ~r/^Pow.Ecto/,
"Phoenix": ~r/^Pow.Phoenix/,
"Plug extension": ~r/^Pow.Extension.Plug/,
"Ecto extension": ~r/^Pow.Extension.Ecto/,
"Phoenix extension": ~r/^Pow.Extension.Phoenix/,
"Store handling": ~r/^Pow.Store/,
"Mix helpers": ~r/^Mix.Pow/,
"Extensions": ~r/^(PowEmailConfirmation|PowPersistentSession|PowResetPassword)/
],
groups_for_extras: [
"Extensions": Path.wildcard("lib/extensions/*/README.md"),
]
]
end
end