diff --git a/lib/tableau/extensions/page_extension.ex b/lib/tableau/extensions/page_extension.ex index d38cb5d..c528529 100644 --- a/lib/tableau/extensions/page_extension.ex +++ b/lib/tableau/extensions/page_extension.ex @@ -73,7 +73,7 @@ defmodule Tableau.PageExtension do optional(:enabled, true) => bool(), optional(:dir, "_pages") => str(), optional(:permalink) => str(), - optional(:layout) => str() + optional(:layout) => oneof([str(), atom()]) }), input ) @@ -113,7 +113,7 @@ defmodule Tableau.PageExtension do |> Map.put(:__tableau_page_extension__, true) |> Map.put(:body, body) |> Map.put(:file, filename) - |> Map.put(:layout, Module.concat([front_matter.layout || pages_config.layout])) + |> Map.put(:layout, Module.concat([front_matter[:layout] || pages_config.layout])) |> Common.build_permalink(pages_config) end end diff --git a/lib/tableau/extensions/post_extension.ex b/lib/tableau/extensions/post_extension.ex index 3b699e2..134b8bd 100644 --- a/lib/tableau/extensions/post_extension.ex +++ b/lib/tableau/extensions/post_extension.ex @@ -81,7 +81,7 @@ defmodule Tableau.PostExtension do optional(:dir, "_posts") => str(), optional(:future, false) => bool(), optional(:permalink) => str(), - optional(:layout) => str() + optional(:layout) => oneof([atom(), str()]) }), config ) diff --git a/test/tableau/extensions/page_extension_test.exs b/test/tableau/extensions/page_extension_test.exs index 3547dba..f287bde 100644 --- a/test/tableau/extensions/page_extension_test.exs +++ b/test/tableau/extensions/page_extension_test.exs @@ -13,7 +13,7 @@ defmodule Tableau.PageExtensionTest do describe "run" do setup %{tmp_dir: dir} do - assert {:ok, config} = PageExtension.config(%{dir: dir, enabled: true}) + assert {:ok, config} = PageExtension.config(%{dir: dir, enabled: true, layout: Blog.DefaultPageLayout}) token = %{ site: %{config: %{converters: [md: Tableau.MDExConverter]}}, @@ -200,5 +200,33 @@ defmodule Tableau.PageExtensionTest do ] } = token end + + test "inherits layout from page extension config", %{tmp_dir: dir, token: token} do + File.write(Path.join(dir, "a-page.md"), """ + --- + title: missing layout key + type: articles + permalink: /:type/:title + --- + + A great page + """) + + assert {:ok, token} = PageExtension.run(token) + + assert %{ + pages: [ + %{ + __tableau_page_extension__: true, + body: "\nA great page\n", + file: ^dir <> "/a-page.md", + layout: Blog.DefaultPageLayout, + permalink: "/articles/missing-layout-key", + title: "missing layout key", + type: "articles" + } + ] + } = token + end end end diff --git a/test/tableau/extensions/post_extension_test.exs b/test/tableau/extensions/post_extension_test.exs index f1b36a1..caf71d0 100644 --- a/test/tableau/extensions/post_extension_test.exs +++ b/test/tableau/extensions/post_extension_test.exs @@ -13,7 +13,7 @@ defmodule Tableau.PostExtensionTest do describe "run" do setup %{tmp_dir: dir} do - assert {:ok, config} = PostExtension.config(%{dir: dir, enabled: true}) + assert {:ok, config} = PostExtension.config(%{dir: dir, enabled: true, layout: Blog.DefaultPostLayout}) token = %{ site: %{config: %{converters: [md: Tableau.MDExConverter]}}, @@ -233,6 +233,34 @@ defmodule Tableau.PostExtensionTest do } = token end + test "inherits layout from post extension config", %{tmp_dir: dir, token: token} do + File.write(Path.join(dir, "a-post.md"), """ + --- + title: Missing layout key + date: 2018-02-28 + permalink: /:title + --- + + A great post + """) + + assert {:ok, token} = PostExtension.run(token) + + assert %{ + posts: [ + %{ + __tableau_post_extension__: true, + body: "\nA great post\n", + date: ~U[2018-02-28 00:00:00Z], + file: ^dir <> "/a-post.md", + layout: Blog.DefaultPostLayout, + permalink: "/missing-layout-key", + title: "Missing layout key" + } + ] + } = token + end + test "handles frontmatter data in the permalink", %{tmp_dir: dir, token: token} do File.write(Path.join(dir, "a-post.md"), """ ---