Feature: Collections As a hacker who likes to structure content I want to be able to create collections of similar information And render them Scenario: Unrendered collection Given I have an "index.html" page that contains "Collections: {{ site.methods }}" And I have fixture collections And I have a configuration file with "collections" set to "['methods']" When I run jekyll build Then the _site directory should exist And I should see "Collections:

Use Jekyll.configuration to build a full configuration for use w/Jekyll.

\n\n

Whatever: foo.bar

\n

Signs are nice

\n

Jekyll.sanitized_path is used to make sure your path is in your source.

\n

Run your generators! default

\n

Page without title.

\n

Run your generators! default

" in "_site/index.html" And the "_site/methods/configuration.html" file should not exist Scenario: Rendered collection Given I have an "index.html" page that contains "Collections: {{ site.collections }}" And I have an "collection_metadata.html" page that contains "Methods metadata: {{ site.collections.methods.foo }} {{ site.collections.methods }}" And I have fixture collections And I have a "_config.yml" file with content: """ collections: methods: output: true foo: bar """ When I run jekyll build Then the _site directory should exist And I should see "Collections: {\"methods" in "_site/index.html" And I should see "Methods metadata: bar" in "_site/collection_metadata.html" And I should see "

Whatever: foo.bar

" in "_site/methods/configuration.html" Scenario: Rendered collection at a custom URL Given I have an "index.html" page that contains "Collections: {{ site.collections }}" And I have fixture collections And I have a "_config.yml" file with content: """ collections: methods: output: true permalink: /:collection/:path/ """ When I run jekyll build Then the _site directory should exist And I should see "

Whatever: foo.bar

" in "_site/methods/configuration/index.html" Scenario: Rendered document in a layout Given I have an "index.html" page that contains "Collections: {{ site.collections }}" And I have a default layout that contains "
Tom Preston-Werner
{{content}}" And I have fixture collections And I have a "_config.yml" file with content: """ collections: methods: output: true foo: bar """ When I run jekyll build Then the _site directory should exist And I should see "Collections: {\"methods" in "_site/index.html" And I should see "

Run your generators! default

" in "_site/methods/site/generate.html" And I should see "
Tom Preston-Werner
" in "_site/methods/site/generate.html" Scenario: Collections specified as an array Given I have an "index.html" page that contains "Collections: {% for method in site.methods %}{{ method.relative_path }} {% endfor %}" And I have fixture collections And I have a "_config.yml" file with content: """ collections: - methods """ When I run jekyll build Then the _site directory should exist And I should see "Collections: _methods/configuration.md _methods/escape-\+ #%20\[\].md _methods/sanitized_path.md _methods/site/generate.md _methods/site/initialize.md _methods/um_hi.md" in "_site/index.html" Scenario: Collections specified as an hash Given I have an "index.html" page that contains "Collections: {% for method in site.methods %}{{ method.relative_path }} {% endfor %}" And I have fixture collections And I have a "_config.yml" file with content: """ collections: - methods """ When I run jekyll build Then the _site directory should exist And I should see "Collections: _methods/configuration.md _methods/escape-\+ #%20\[\].md _methods/sanitized_path.md _methods/site/generate.md _methods/site/initialize.md _methods/um_hi.md" in "_site/index.html" Scenario: All the documents Given I have an "index.html" page that contains "All documents: {% for doc in site.documents %}{{ doc.relative_path }} {% endfor %}" And I have fixture collections And I have a "_config.yml" file with content: """ collections: - methods """ When I run jekyll build Then the _site directory should exist And I should see "All documents: _methods/configuration.md _methods/escape-\+ #%20\[\].md _methods/sanitized_path.md _methods/site/generate.md _methods/site/initialize.md _methods/um_hi.md" in "_site/index.html" Scenario: Documents have an output attribute, which is the converted HTML Given I have an "index.html" page that contains "First document's output: {{ site.documents.first.output }}" And I have fixture collections And I have a "_config.yml" file with content: """ collections: - methods """ When I run jekyll build Then the _site directory should exist And I should see "First document's output:

Use Jekyll.configuration to build a full configuration for use w/Jekyll.

\n\n

Whatever: foo.bar

" in "_site/index.html" Scenario: Filter documents by where Given I have an "index.html" page that contains "{% assign items = site.methods | where: 'whatever','foo.bar' %}Item count: {{ items.size }}" And I have fixture collections And I have a "_config.yml" file with content: """ collections: - methods """ When I run jekyll build Then the _site directory should exist And I should see "Item count: 2" in "_site/index.html" Scenario: Sort by title Given I have an "index.html" page that contains "{% assign items = site.methods | sort: 'title' %}1. of {{ items.size }}: {{ items.first.output }}" And I have fixture collections And I have a "_config.yml" file with content: """ collections: - methods """ When I run jekyll build Then the _site directory should exist And I should see "1. of 7:

Page without title.

" in "_site/index.html" Scenario: Sort by relative_path Given I have an "index.html" page that contains "Collections: {% assign methods = site.methods | sort: 'relative_path' %}{% for method in methods %}{{ method.title }}, {% endfor %}" And I have fixture collections And I have a "_config.yml" file with content: """ collections: - methods """ When I run jekyll build Then the _site directory should exist And I should see "Collections: Jekyll.configuration, Jekyll.escape, Jekyll.sanitized_path, Site#generate, , Site#generate," in "_site/index.html"