@@ -21,34 +21,7 @@ defmodule Mix.Tasks.Tableau.Build do
21
21
22
22
mods = :code . all_available ( )
23
23
24
- token =
25
- for module <- pre_build_extensions ( mods ) , reduce: token do
26
- token ->
27
- config_mod = Module . concat ( [ module , Config ] )
28
-
29
- raw_config =
30
- :tableau |> Application . get_env ( module , % { } ) |> Map . new ( )
31
-
32
- if raw_config [ :enabled ] do
33
- { :ok , config } =
34
- config_mod . new ( raw_config )
35
-
36
- { :ok , key } = Tableau.Extension . key ( module )
37
-
38
- token = put_in ( token [ key ] , config )
39
-
40
- case module . run ( token ) do
41
- { :ok , token } ->
42
- token
43
-
44
- :error ->
45
- Logger . error ( "#{ inspect ( module ) } failed to run" )
46
- token
47
- end
48
- else
49
- token
50
- end
51
- end
24
+ token = mods |> pre_build_extensions ( ) |> run_extensions ( token )
52
25
53
26
mods = :code . all_available ( )
54
27
graph = Tableau.Graph . new ( mods )
@@ -60,12 +33,14 @@ defmodule Mix.Tasks.Tableau.Build do
60
33
{ mod , Map . new ( Tableau.Graph.Nodable . opts ( mod ) || [ ] ) }
61
34
end
62
35
63
- { page_mods , pages } = Enum . unzip ( pages )
36
+ { page_mods , just_pages } = Enum . unzip ( pages )
64
37
65
- token = put_in ( token . site [ :pages ] , pages )
38
+ token = put_in ( token . site [ :pages ] , just_pages )
66
39
67
- for mod <- page_mods do
68
- content = Tableau.Document . render ( graph , mod , token )
40
+ token = mods |> pre_write_extensions ( ) |> run_extensions ( token )
41
+
42
+ for { mod , page } <- Enum . zip ( page_mods , token . site . pages ) do
43
+ content = Tableau.Document . render ( graph , mod , token , page )
69
44
permalink = Tableau.Graph.Nodable . permalink ( mod )
70
45
dir = Path . join ( out , permalink )
71
46
@@ -78,32 +53,16 @@ defmodule Mix.Tasks.Tableau.Build do
78
53
File . cp_r! ( config . include_dir , out )
79
54
end
80
55
81
- for module <- post_write_extensions ( mods ) , reduce: token do
82
- token ->
83
- config_mod = Module . concat ( [ module , Config ] )
84
-
85
- raw_config =
86
- :tableau |> Application . get_env ( module , % { } ) |> Map . new ( )
87
-
88
- if raw_config [ :enabled ] do
89
- { :ok , config } =
90
- config_mod . new ( raw_config )
91
-
92
- { :ok , key } = Tableau.Extension . key ( module )
93
-
94
- token = put_in ( token [ key ] , config )
56
+ token = run_extensions ( post_write_extensions ( mods ) , token )
95
57
96
- case module . run ( token ) do
97
- { :ok , token } ->
98
- token
58
+ token
59
+ end
99
60
100
- :error ->
101
- Logger . error ( "#{ inspect ( module ) } failed to run" )
102
- token
103
- end
104
- else
105
- token
106
- end
61
+ defp validate_config ( config_mod , raw_config ) do
62
+ if Code . ensure_loaded? ( config_mod ) do
63
+ config_mod . new ( raw_config )
64
+ else
65
+ { :ok , raw_config }
107
66
end
108
67
end
109
68
@@ -118,6 +77,17 @@ defmodule Mix.Tasks.Tableau.Build do
118
77
Enum . sort_by ( extensions , & & 1 . __tableau_extension_priority__ ( ) )
119
78
end
120
79
80
+ defp pre_write_extensions ( modules ) do
81
+ extensions =
82
+ for { mod , _ , _ } <- modules ,
83
+ mod = Module . concat ( [ to_string ( mod ) ] ) ,
84
+ match? ( { :ok , :pre_write } , Tableau.Extension . type ( mod ) ) do
85
+ mod
86
+ end
87
+
88
+ Enum . sort_by ( extensions , & & 1 . __tableau_extension_priority__ ( ) )
89
+ end
90
+
121
91
defp post_write_extensions ( modules ) do
122
92
extensions =
123
93
for { mod , _ , _ } <- modules ,
@@ -128,4 +98,33 @@ defmodule Mix.Tasks.Tableau.Build do
128
98
129
99
Enum . sort_by ( extensions , & & 1 . __tableau_extension_priority__ ( ) )
130
100
end
101
+
102
+ defp run_extensions ( extensions , token ) do
103
+ for module <- extensions , reduce: token do
104
+ token ->
105
+ config_mod = Module . concat ( [ module , Config ] )
106
+
107
+ raw_config =
108
+ :tableau |> Application . get_env ( module , % { enabled: true } ) |> Map . new ( )
109
+
110
+ if raw_config [ :enabled ] do
111
+ { :ok , config } = validate_config ( config_mod , raw_config )
112
+
113
+ { :ok , key } = Tableau.Extension . key ( module )
114
+
115
+ token = put_in ( token [ key ] , config )
116
+
117
+ case module . run ( token ) do
118
+ { :ok , token } ->
119
+ token
120
+
121
+ :error ->
122
+ Logger . error ( "#{ inspect ( module ) } failed to run" )
123
+ token
124
+ end
125
+ else
126
+ token
127
+ end
128
+ end
129
+ end
131
130
end
0 commit comments