From bc45d38cbb0841a20dd252d4f349b9930678a278 Mon Sep 17 00:00:00 2001 From: Ashwin Maroli Date: Mon, 16 Jun 2025 19:28:48 +0530 Subject: [PATCH 1/3] Expose front matter defaults to Liquid templates --- lib/jekyll-archives/page_drop.rb | 9 +++- test/test_jekyll_archive.rb | 71 ++++++++++++++++++++++++++++++++ 2 files changed, 79 insertions(+), 1 deletion(-) diff --git a/lib/jekyll-archives/page_drop.rb b/lib/jekyll-archives/page_drop.rb index b7a9cf1..9eb489a 100644 --- a/lib/jekyll-archives/page_drop.rb +++ b/lib/jekyll-archives/page_drop.rb @@ -8,7 +8,14 @@ class PageDrop < Jekyll::Drops::Drop mutable false def_delegators :@obj, :posts, :type, :title, :date, :name, :path, :url, :permalink - private def_delegator :@obj, :data, :fallback_data + private def_delegators :@obj, :site, :relative_path, :data + + def fallback_data + Jekyll::Utils.deep_merge_hashes( + data, site.frontmatter_defaults.all(relative_path, type) + ) + end + private :fallback_data end end end diff --git a/test/test_jekyll_archive.rb b/test/test_jekyll_archive.rb index e38b51d..6ee6f8b 100644 --- a/test/test_jekyll_archive.rb +++ b/test/test_jekyll_archive.rb @@ -95,4 +95,75 @@ class TestJekyllArchive < Minitest::Test assert_equal expected, archive.to_liquid.to_h end end + + context "the generated archive page preconfigured with front matter defaults" do + setup do + site = fixture_site( + "jekyll-archives" => { + "enabled" => true, + }, + "defaults" => [ + { + "scope" => { + "type" => "category", + }, + "values" => { + "author_profile" => true, + "sidebar" => false, + }, + }, + { + "scope" => { + "type" => "day", + }, + "values" => { + "author_profile" => false, + "sidebar" => true, + }, + }, + ] + ) + site.read + Jekyll::Archives::Archives.new(site.config).generate(site) + @archives = site.config["archives"] + end + + should "expose all attributes to Liquid templates" do + archive = @archives.find { |a| a.type == "category" } + archive.posts = [] + expected = { + "author_profile" => true, + "sidebar" => false, + "layout" => "archive", + "posts" => [], + "type" => "category", + "title" => "plugins", + "date" => nil, + "name" => "index", + "path" => "category/plugins/index.html", + "url" => "/category/plugins/", + "permalink" => nil, + } + + assert_equal expected, archive.to_liquid.to_h + + archive = @archives.find { |a| a.type == "day" } + archive.posts = [] + expected = { + "author_profile" => false, + "sidebar" => true, + "layout" => "archive", + "posts" => [], + "type" => "day", + "title" => nil, + "date" => archive.date, + "name" => "index", + "path" => "2013/08/16/index.html", + "url" => "/2013/08/16/", + "permalink" => nil, + } + + assert_equal expected, archive.to_liquid.to_h + end + end end From 6e6a853e3670d9fca7020a756068e1a3bc9c13e9 Mon Sep 17 00:00:00 2001 From: Ashwin Maroli Date: Mon, 16 Jun 2025 19:46:03 +0530 Subject: [PATCH 2/3] Ensure compatibility with Ruby 2.7 --- lib/jekyll-archives/page_drop.rb | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/lib/jekyll-archives/page_drop.rb b/lib/jekyll-archives/page_drop.rb index 9eb489a..444ce8e 100644 --- a/lib/jekyll-archives/page_drop.rb +++ b/lib/jekyll-archives/page_drop.rb @@ -8,14 +8,15 @@ class PageDrop < Jekyll::Drops::Drop mutable false def_delegators :@obj, :posts, :type, :title, :date, :name, :path, :url, :permalink - private def_delegators :@obj, :site, :relative_path, :data + def_delegators :@obj, :site, :relative_path, :data def fallback_data Jekyll::Utils.deep_merge_hashes( data, site.frontmatter_defaults.all(relative_path, type) ) end - private :fallback_data + + private :site, :relative_path, :data, :fallback_data end end end From 4d27977a76cbb4c5a31ca96309672d0517aab4dd Mon Sep 17 00:00:00 2001 From: Ashwin Maroli Date: Mon, 16 Jun 2025 19:56:29 +0530 Subject: [PATCH 3/3] Avoid unnecessary extra method call --- lib/jekyll-archives/page_drop.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/jekyll-archives/page_drop.rb b/lib/jekyll-archives/page_drop.rb index 444ce8e..f5e920b 100644 --- a/lib/jekyll-archives/page_drop.rb +++ b/lib/jekyll-archives/page_drop.rb @@ -7,8 +7,8 @@ class PageDrop < Jekyll::Drops::Drop mutable false - def_delegators :@obj, :posts, :type, :title, :date, :name, :path, :url, :permalink - def_delegators :@obj, :site, :relative_path, :data + def_delegators :@obj, :posts, :type, :title, :date, :name, :path, :url, :permalink, + :site, :relative_path, :data def fallback_data Jekyll::Utils.deep_merge_hashes(