diff --git a/features/collections.feature b/features/collections.feature index 32e9161c..402e7dab 100644 --- a/features/collections.feature +++ b/features/collections.feature @@ -70,3 +70,15 @@ Feature: Collections When I run jekyll build Then the _site directory should exist And I should see "Collections: _methods/configuration.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/sanitized_path.md _methods/site/generate.md _methods/site/initialize.md _methods/um_hi.md" in "_site/index.html" diff --git a/lib/jekyll/document.rb b/lib/jekyll/document.rb index 0a75fe96..3b2b6eeb 100644 --- a/lib/jekyll/document.rb +++ b/lib/jekyll/document.rb @@ -228,5 +228,14 @@ module Jekyll path <=> anotherDocument.path end + # Determine whether this document should be written. + # Based on the Collection to which it belongs. + # + # True if the document has a collection and if that collection's #write? + # method returns true, otherwise false. + def write? + collection && collection.write? + end + end end diff --git a/lib/jekyll/site.rb b/lib/jekyll/site.rb index ccc6d2c6..5ebf3c20 100644 --- a/lib/jekyll/site.rb +++ b/lib/jekyll/site.rb @@ -325,6 +325,7 @@ module Jekyll "categories" => post_attr_hash('categories'), "tags" => post_attr_hash('tags'), "collections" => collections, + "documents" => documents, "data" => site_data })) } @@ -405,18 +406,18 @@ module Jekyll end end + def docs_to_write + documents.select(&:write?) + end + def documents collections.reduce(Set.new) do |docs, (_, collection)| - if collection.write? - docs.merge(collection.docs) - else - docs - end - end + docs.merge(collection.docs) + end.to_a end def each_site_file - %w(posts pages static_files documents).each do |type| + %w(posts pages static_files docs_to_write).each do |type| send(type).each do |item| yield item end