Skip to content

Commit b09ce49

Browse files
authored
feat!: run pre-write extensions after render but before write (#111)
Closes #107 BREAKING-CHANGE: :pre_write extensions now are run after rendering the graph, but before writing to disk. Previously, the body content of each page would not have been converted yet, but now it will. This should enable anyone to modify the HTML after other extensions converter it. perf: render the graph in parallel fix: actually respect the "enabled" key in `use Tableau.Extension`
1 parent e0cc106 commit b09ce49

File tree

2 files changed

+18
-8
lines changed

2 files changed

+18
-8
lines changed

lib/mix/tasks/tableau.build.ex

+17-7
Original file line numberDiff line numberDiff line change
@@ -39,20 +39,27 @@ defmodule Mix.Tasks.Tableau.Build do
3939
{mod, Map.new(Nodable.opts(mod) || [])}
4040
end
4141

42-
{page_mods, just_pages} = Enum.unzip(pages)
42+
pages =
43+
pages
44+
|> Task.async_stream(fn {mod, page} ->
45+
content = Tableau.Document.render(graph, mod, token, page)
46+
permalink = Nodable.permalink(mod)
47+
48+
Map.merge(page, %{body: content, permalink: permalink})
49+
end)
50+
|> Stream.map(fn {:ok, result} -> result end)
51+
|> Enum.to_list()
4352

44-
token = put_in(token.site[:pages], just_pages)
53+
token = put_in(token.site[:pages], pages)
4554

4655
token = mods |> extensions_for(:pre_write) |> run_extensions(token)
4756

48-
for {mod, page} <- Enum.zip(page_mods, token.site.pages) do
49-
content = Tableau.Document.render(graph, mod, token, page)
50-
permalink = Nodable.permalink(mod)
57+
for %{body: body, permalink: permalink} <- pages do
5158
dir = Path.join(out, permalink)
5259

5360
File.mkdir_p!(dir)
5461

55-
File.write!(Path.join(dir, "index.html"), content)
62+
File.write!(Path.join(dir, "index.html"), body)
5663
end
5764

5865
if File.exists?(config.include_dir) do
@@ -85,7 +92,10 @@ defmodule Mix.Tasks.Tableau.Build do
8592
for module <- extensions, reduce: token do
8693
token ->
8794
raw_config =
88-
:tableau |> Application.get_env(module, %{enabled: true}) |> Map.new()
95+
Map.merge(
96+
%{enabled: Tableau.Extension.enabled?(module)},
97+
:tableau |> Application.get_env(module, %{}) |> Map.new()
98+
)
8999

90100
if raw_config[:enabled] do
91101
{:ok, config} = validate_config(module, raw_config)

lib/tableau/extension.ex

+1-1
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,7 @@ defmodule Tableau.Extension do
8484
quote do
8585
def __tableau_extension_type__, do: unquote(opts)[:type]
8686
def __tableau_extension_key__, do: unquote(opts)[:key]
87-
def __tableau_extension_enabled__, do: unquote(opts)[:enabled] || true
87+
def __tableau_extension_enabled__, do: Keyword.get(unquote(opts), :enabled, true)
8888
def __tableau_extension_priority__, do: unquote(opts)[:priority] || 0
8989
end
9090

0 commit comments

Comments
 (0)