Optimize default front matter using `File.fnmatch?` (#9185)

Merge pull request 9185
This commit is contained in:
Ashwin Maroli 2022-11-27 22:59:34 +05:30 committed by GitHub
parent ee29b05e80
commit 0cf8533f61
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 40 additions and 7 deletions

View File

@ -109,7 +109,7 @@ module Jekyll
sanitized_path = sanitize_path(path)
if rel_scope_path.include?("*")
glob_scope(sanitized_path, rel_scope_path)
File.fnmatch?(strip_collections_dir(rel_scope_path), sanitized_path)
else
path_is_subpath?(sanitized_path, strip_collections_dir(rel_scope_path))
end

View File

@ -0,0 +1 @@
<svg></svg>

After

Width:  |  Height:  |  Size: 13 B

View File

@ -0,0 +1,3 @@
---
speciality: Ruby
---

View File

@ -0,0 +1 @@
<svg></svg>

After

Width:  |  Height:  |  Size: 13 B

View File

@ -0,0 +1,3 @@
---
speciality: JS Frameworks
---

View File

@ -25,10 +25,6 @@ class TestFrontMatterDefaults < JekyllUnitTest
assert_equal "val", @affected.data["key"]
assert_nil @not_affected.data["key"]
end
should "not call Dir.glob block" do
refute_includes @output, "Globbed Scope Path:"
end
end
context "A site with full front matter defaults (glob)" do
@ -53,9 +49,38 @@ class TestFrontMatterDefaults < JekyllUnitTest
assert_equal "val", @affected.data["key"]
assert_nil @not_affected.data["key"]
end
end
should "call Dir.glob block" do
assert_includes @output, "Globbed Scope Path:"
context "A site with collections and front matter defaults with glob patterns" do
setup do
site = fixture_site(
"collections_dir" => "gathering",
"collections" => { "staff" => { "output" => true } },
"defaults" => [
{
"scope" => { "path" => "_staff/**/*.md", "type" => "staff" },
"values" => { "layout" => "simple" },
},
{
"scope" => { "path" => "_staff/**/*.svg" },
"values" => { "css_class" => "epilson" },
},
]
)
site.read
@staff = site.collections["staff"]
end
should "affect the appropriate items only" do
@staff.docs.each do |item|
assert_equal "simple", item.data["layout"]
assert_nil item.data["css_class"]
end
@staff.files.each do |item|
assert_equal "epilson", item.data["css_class"]
assert_nil item.data["layout"]
end
end
end