Filter entries in the collection per EntryFilter#filter
This commit is contained in:
parent
323ea0ef73
commit
aa502348e5
|
@ -25,16 +25,34 @@ module Jekyll
|
||||||
#
|
#
|
||||||
# Returns the sorted array of docs.
|
# Returns the sorted array of docs.
|
||||||
def read
|
def read
|
||||||
Dir.glob(File.join(directory, "**", "*.*")).each do |file_path|
|
filtered_entries.each do |file_path|
|
||||||
if allowed_document?(file_path)
|
doc = Jekyll::Document.new(Jekyll.sanitized_path(directory, file_path), { site: site, collection: self })
|
||||||
doc = Jekyll::Document.new(file_path, { site: site, collection: self })
|
doc.read
|
||||||
doc.read
|
docs << doc
|
||||||
docs << doc
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
docs.sort!
|
docs.sort!
|
||||||
end
|
end
|
||||||
|
|
||||||
|
# All the entries in this collection.
|
||||||
|
#
|
||||||
|
# Returns an Array of file paths to the documents in this collection
|
||||||
|
# relative to the collection's directory
|
||||||
|
def entries
|
||||||
|
Dir.glob(File.join(directory, "**", "*.*")).map do |entry|
|
||||||
|
entry[File.join(directory, "")] = ''; entry
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
# Filtered version of the entries in this collection.
|
||||||
|
# See `Jekyll::EntryFilter#filter` for more information.
|
||||||
|
#
|
||||||
|
# Returns a list of filtered entry paths.
|
||||||
|
def filtered_entries
|
||||||
|
Dir.chdir(directory) do
|
||||||
|
entry_filter.filter(entries)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
# The directory for this Collection, relative to the site source.
|
# The directory for this Collection, relative to the site source.
|
||||||
#
|
#
|
||||||
# Returns a String containing the directory name where the collection
|
# Returns a String containing the directory name where the collection
|
||||||
|
@ -51,14 +69,12 @@ module Jekyll
|
||||||
Jekyll.sanitized_path(site.source, relative_directory)
|
Jekyll.sanitized_path(site.source, relative_directory)
|
||||||
end
|
end
|
||||||
|
|
||||||
# Determine whether the document at a given path is an allowed document.
|
# The entry filter for this collection.
|
||||||
|
# Creates an instance of Jekyll::EntryFilter.
|
||||||
#
|
#
|
||||||
# path - the path to the document within this collection
|
# Returns the instance of Jekyll::EntryFilter for this collection.
|
||||||
#
|
def entry_filter
|
||||||
# Returns false if the site is in safe mode and the document is a symlink,
|
@entry_filter ||= Jekyll::EntryFilter.new(site, relative_directory)
|
||||||
# true otherwise.
|
|
||||||
def allowed_document?(path)
|
|
||||||
!(site.safe && File.symlink?(path))
|
|
||||||
end
|
end
|
||||||
|
|
||||||
# An inspect string.
|
# An inspect string.
|
||||||
|
|
|
@ -193,12 +193,12 @@ module Jekyll
|
||||||
#
|
#
|
||||||
# Returns a Hash representing this Document's data.
|
# Returns a Hash representing this Document's data.
|
||||||
def to_liquid
|
def to_liquid
|
||||||
data.merge({
|
Utils.deep_merge_hashes data, {
|
||||||
"content" => content,
|
"content" => content,
|
||||||
"path" => path,
|
"path" => path,
|
||||||
"relative_path" => relative_path,
|
"relative_path" => relative_path,
|
||||||
"url" => url
|
"url" => url
|
||||||
})
|
}
|
||||||
end
|
end
|
||||||
|
|
||||||
# The inspect string for this document.
|
# The inspect string for this document.
|
||||||
|
|
|
@ -0,0 +1,5 @@
|
||||||
|
---
|
||||||
|
title: The unreadable wonder
|
||||||
|
---
|
||||||
|
|
||||||
|
Don't read me, you fool! FILTER ME
|
|
@ -0,0 +1,5 @@
|
||||||
|
---
|
||||||
|
title: Don't Include Me Either
|
||||||
|
---
|
||||||
|
|
||||||
|
Don't include me either. FILTER ME PLZ
|
|
@ -68,6 +68,7 @@ class TestCollections < Test::Unit::TestCase
|
||||||
"collections" => ["methods"]
|
"collections" => ["methods"]
|
||||||
})
|
})
|
||||||
@site.process
|
@site.process
|
||||||
|
@collection = @site.collections["methods"]
|
||||||
end
|
end
|
||||||
|
|
||||||
should "create a Hash on Site with the label mapped to the instance of the Collection" do
|
should "create a Hash on Site with the label mapped to the instance of the Collection" do
|
||||||
|
@ -89,6 +90,19 @@ class TestCollections < Test::Unit::TestCase
|
||||||
], doc.relative_path
|
], doc.relative_path
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
should "not include files which start with an underscore in the base collection directory" do
|
||||||
|
assert_not_include @collection.filtered_entries, "_do_not_read_me.md"
|
||||||
|
end
|
||||||
|
|
||||||
|
should "not include files which start with an underscore in a subdirectory" do
|
||||||
|
assert_not_include @collection.filtered_entries, "site/_dont_include_me_either.md"
|
||||||
|
end
|
||||||
|
|
||||||
|
should "not include the underscored files in the list of docs" do
|
||||||
|
assert_not_include @collection.docs.map(&:relative_path), "_methods/_do_not_read_me.md"
|
||||||
|
assert_not_include @collection.docs.map(&:relative_path), "_methods/site/_dont_include_me_either.md"
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context "in safe mode" do
|
context "in safe mode" do
|
||||||
|
@ -102,11 +116,11 @@ class TestCollections < Test::Unit::TestCase
|
||||||
end
|
end
|
||||||
|
|
||||||
should "not allow symlinks" do
|
should "not allow symlinks" do
|
||||||
assert !@collection.allowed_document?(File.join(@collection.directory, "um_hi.md"))
|
assert_not_include @collection.filtered_entries, "um_hi.md"
|
||||||
end
|
end
|
||||||
|
|
||||||
should "not include the symlinked file in the list of docs" do
|
should "not include the symlinked file in the list of docs" do
|
||||||
assert_not_include %w[_methods/um_hi.md], @collection.docs.map(&:relative_path)
|
assert_not_include @collection.docs.map(&:relative_path), "_methods/um_hi.md"
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue