@@ -8,9 +8,9 @@ defmodule Pow.MixProject do
8
8
app: :pow ,
9
9
version: @ version ,
10
10
elixir: "~> 1.6" ,
11
- elixirc_paths: elixirc_paths ( Mix . env ( ) ) ,
11
+ elixirc_paths: elixirc_paths ( Mix . env ( ) , optional_deps ( ) ) ,
12
12
start_permanent: Mix . env ( ) == :prod ,
13
- compilers: [ :phoenix ] ++ Mix . compilers ( ) ,
13
+ compilers: compilers ( optional_deps ( ) ) ,
14
14
deps: deps ( ) ,
15
15
16
16
# Hex
@@ -49,8 +49,53 @@ defmodule Pow.MixProject do
49
49
]
50
50
end
51
51
52
- defp elixirc_paths ( :test ) , do: [ "lib" , "test/support" ]
53
- defp elixirc_paths ( _ ) , do: [ "lib" ]
52
+ def elixirc_paths ( :test , _optional_deps ) , do: [ "lib" , "test/support" ]
53
+ def elixirc_paths ( _ , optional_deps ) do
54
+ case optional_deps_missing? ( optional_deps ) do
55
+ true -> paths_without_missing_optional_deps ( optional_deps )
56
+ false -> [ "lib" ]
57
+ end
58
+ end
59
+
60
+ def compilers ( optional_deps ) do
61
+ case phoenix_missing? ( optional_deps ) do
62
+ true -> [ :phoenix ] ++ Mix . compilers
63
+ _ -> Mix . compilers ( )
64
+ end
65
+ end
66
+
67
+ defp phoenix_missing? ( optional_deps ) do
68
+ Keyword . get ( optional_deps , :phoenix )
69
+ end
70
+
71
+ defp optional_deps_missing? ( optional_deps ) do
72
+ not Enum . empty? ( optional_deps_missing ( optional_deps ) )
73
+ end
74
+
75
+ defp optional_deps_missing ( optional_deps ) do
76
+ Enum . reject ( optional_deps , & elem ( & 1 , 1 ) )
77
+ end
78
+
79
+ defp optional_deps do
80
+ for dep <- [ :phoenix , :phoenix_html , :ecto , :plug ] do
81
+ case Mix.ProjectStack . peek ( ) do
82
+ % { config: config } -> { dep , Keyword . has_key? ( config [ :deps ] , dep ) }
83
+ _ -> { dep , true }
84
+ end
85
+ end
86
+ end
87
+
88
+ defp paths_without_missing_optional_deps ( optional_deps ) do
89
+ deps = optional_deps_missing ( optional_deps )
90
+
91
+ "lib/**/*.ex"
92
+ |> Path . wildcard ( )
93
+ |> Enum . reject ( & reject_deps_path? ( deps , & 1 ) )
94
+ end
95
+
96
+ defp reject_deps_path? ( deps , path ) do
97
+ Enum . any? ( deps , & String . contains? ( path , "/#{ elem ( & 1 , 0 ) } " ) )
98
+ end
54
99
55
100
defp package do
56
101
[
0 commit comments