Feature: frontmatter defaults Scenario: Use default for frontmatter variables internally Given I have a _layouts directory And I have a pretty layout that contains "THIS IS THE LAYOUT: {{content}}" And I have a _posts directory And I have the following post: | title | date | content | | default layout | 2013-09-11 | just some post | And I have an "index.html" page with title "some title" that contains "just some page" And I have a configuration file with "defaults" set to "[{scope: {path: ""}, values: {layout: "pretty"}}]" When I run jekyll build Then the _site directory should exist And I should see "THIS IS THE LAYOUT:
just some post
" in "_site/2013/09/11/default-layout.html" And I should see "THIS IS THE LAYOUT: just some page" in "_site/index.html" Scenario: Use default for frontmatter variables in Liquid Given I have a _posts directory And I have the following post: | title | date | content | | default data | 2013-09-11 |{{page.custom}}
some special data
\ninfo on the webpage
" in "_site/2013/10/14/about.html" And I should see "subfolder:info on the special section
" in "_site/special/2013/10/14/about.html" And I should see "root: Overview for the webpage" in "_site/index.html" And I should see "subfolder: Overview for the special section" in "_site/special/index.html" Scenario: Use frontmatter variables by relative path Given I have a _layouts directory And I have a main layout that contains "main: {{ content }}" And I have a _posts directory And I have the following post: | title | date | content | | about | 2013-10-14 | content of site/2013/10/14/about.html | And I have a special/_posts directory And I have the following post in "special": | title | date | path | content | | about1 | 2013-10-14 | local | content of site/special/2013/10/14/about1.html | | about2 | 2013-10-14 | local | content of site/special/2013/10/14/about2.html | And I have a configuration file with "defaults" set to "[{scope: {path: "special"}, values: {layout: "main"}}, {scope: {path: "special/_posts"}, values: {layout: "main"}}, {scope: {path: "_posts"}, values: {layout: "main"}}]" When I run jekyll build Then the _site directory should exist And I should see "main:content of site/2013/10/14/about.html
" in "_site/2013/10/14/about.html" And I should see "main:content of site/special/2013/10/14/about1.html
" in "_site/special/2013/10/14/about1.html" And I should see "main:content of site/special/2013/10/14/about2.html
" in "_site/special/2013/10/14/about2.html" Scenario: Override frontmatter defaults by type Given I have a _posts directory And I have the following post: | title | date | content | | this is a post | 2013-10-14 | blabla | And I have an "index.html" page that contains "interesting stuff" And I have a configuration file with "defaults" set to "[{scope: {path: "", type: "post"}, values: {permalink: "/post.html"}}, {scope: {path: "", type: "page"}, values: {permalink: "/page.html"}}, {scope: {path: ""}, values: {permalink: "/perma.html"}}]" When I run jekyll build Then I should see "blabla" in "_site/post.html" And I should see "interesting stuff" in "_site/page.html" But the "_site/perma.html" file should not exist Scenario: Actual frontmatter overrides defaults Given I have a _posts directory And I have the following post: | title | date | permalink | author | content | | override | 2013-10-14 | /frontmatter.html | some guy | a blog by {{page.author}} | And I have an "index.html" page with permalink "override.html" that contains "nothing" And I have a configuration file with "defaults" set to "[{scope: {path: ""}, values: {permalink: "/perma.html", author: "Chris"}}]" When I run jekyll build Then I should see "a blog by some guy" in "_site/frontmatter.html" And I should see "nothing" in "_site/override.html" But the "_site/perma.html" file should not exist Scenario: Define permalink default for posts Given I have a _posts directory And I have the following post: | title | date | category | content | | testpost | 2013-10-14 | blog | blabla | And I have a configuration file with "defaults" set to "[{scope: {path: "", type: "posts"}, values: {permalink: "/:categories/:title/"}}]" When I run jekyll build Then I should see "blabla" in "_site/blog/testpost/index.html" Scenario: Use frontmatter defaults in collections Given I have a _slides directory And I have a "index.html" file that contains "nothing" And I have a "_slides/slide1.html" file with content: """ --- --- Value: {{ page.myval }} """ And I have a "_config.yml" file with content: """ collections: slides: output: true defaults: - scope: path: "" type: slides values: myval: "Test" """ When I run jekyll build Then the _site directory should exist And I should see "Value: Test" in "_site/slides/slide1.html" Scenario: Override frontmatter defaults inside a collection Given I have a _slides directory And I have a "index.html" file that contains "nothing" And I have a "_slides/slide2.html" file with content: """ --- myval: Override --- Value: {{ page.myval }} """ And I have a "_config.yml" file with content: """ collections: slides: output: true defaults: - scope: path: "" type: slides values: myval: "Test" """ When I run jekyll build Then the _site directory should exist And I should see "Value: Override" in "_site/slides/slide2.html" Scenario: Deep merge frontmatter defaults Given I have an "index.html" page with fruit "{orange: 1}" that contains "Fruits: {{ page.fruit.orange | plus: page.fruit.apple }}" And I have a configuration file with "defaults" set to "[{scope: {path: ""}, values: {fruit: {apple: 2}}}]" When I run jekyll build Then I should see "Fruits: 3" in "_site/index.html"