From 982091af59d376f8c7c3ca32b3158ea2811422a4 Mon Sep 17 00:00:00 2001 From: Chris Buckley Date: Wed, 22 Dec 2021 15:21:52 +0000 Subject: [PATCH 1/6] Get path for first page of paginated pages (fixes #213) --- lib/jekyll-github-metadata/edit-link-tag.rb | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/lib/jekyll-github-metadata/edit-link-tag.rb b/lib/jekyll-github-metadata/edit-link-tag.rb index c150646..3acefee 100644 --- a/lib/jekyll-github-metadata/edit-link-tag.rb +++ b/lib/jekyll-github-metadata/edit-link-tag.rb @@ -35,7 +35,6 @@ def self.def_hash_delegator(hash_method, key, method, default = nil) private def_hash_delegator :site_github, :source, :source, {} private def_hash_delegator :source, :branch, :branch private def_hash_delegator :source, :path, :source_path - private def_hash_delegator :page, :path, :page_path def render(context) @context = context @@ -72,6 +71,16 @@ def parts memoize_conditionally { [repository_url, "edit/", branch, source_path, page_path] } end + def page_path + return page['path'] unless page['paginated'] + + site.pages.dup.select do |page| + if page.pager and page.pager.page == 1 + return page['path'] + end + end + end + def parts_normalized memoize_conditionally do parts.map.with_index do |part, index| From eeff3bb68450a005b1ae8e7d73c97b3b2e225050 Mon Sep 17 00:00:00 2001 From: Chris Buckley Date: Wed, 22 Dec 2021 15:32:42 +0000 Subject: [PATCH 2/6] Fix rubocop comments --- lib/jekyll-github-metadata/edit-link-tag.rb | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/lib/jekyll-github-metadata/edit-link-tag.rb b/lib/jekyll-github-metadata/edit-link-tag.rb index 3acefee..2174a47 100644 --- a/lib/jekyll-github-metadata/edit-link-tag.rb +++ b/lib/jekyll-github-metadata/edit-link-tag.rb @@ -72,12 +72,10 @@ def parts end def page_path - return page['path'] unless page['paginated'] + return page["path"] unless page["paginated"] site.pages.dup.select do |page| - if page.pager and page.pager.page == 1 - return page['path'] - end + return page["path"] if page.pager && page.pager.page == 1 end end From 197b0544efe7e4fa1cd6dcaf2d5e500ecf69093b Mon Sep 17 00:00:00 2001 From: Chris Buckley Date: Wed, 22 Dec 2021 16:31:32 +0000 Subject: [PATCH 3/6] Update to .each and remove use of .dup --- lib/jekyll-github-metadata/edit-link-tag.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/jekyll-github-metadata/edit-link-tag.rb b/lib/jekyll-github-metadata/edit-link-tag.rb index 2174a47..8b759e8 100644 --- a/lib/jekyll-github-metadata/edit-link-tag.rb +++ b/lib/jekyll-github-metadata/edit-link-tag.rb @@ -74,7 +74,7 @@ def parts def page_path return page["path"] unless page["paginated"] - site.pages.dup.select do |page| + site.pages.each do |page| return page["path"] if page.pager && page.pager.page == 1 end end From cb7c1643da7648b91d2304b173a67adb4381cf5c Mon Sep 17 00:00:00 2001 From: Chris Buckley Date: Thu, 23 Dec 2021 01:19:20 +0000 Subject: [PATCH 4/6] Add test for path of paginated page --- spec/edit_link_tag_spec.rb | 18 +++++++++++++++++- spec/spec_helpers/fixture_helper.rb | 19 +++++++++++++++++-- 2 files changed, 34 insertions(+), 3 deletions(-) diff --git a/spec/edit_link_tag_spec.rb b/spec/edit_link_tag_spec.rb index 5f8019f..acea78e 100644 --- a/spec/edit_link_tag_spec.rb +++ b/spec/edit_link_tag_spec.rb @@ -5,7 +5,8 @@ let(:source) { { "branch" => branch, "path" => path } } let(:github) { { "repository_url" => repository_url, "source" => source } } let(:config) { { "github" => github, "plugins" => ["jekyll-github-metadata"] } } - let(:page) { make_page } + let(:pager) { nil } + let(:page) { make_page({}, pager) } let(:site) { make_site(config) } let(:render_context) { make_context(:page => page, :site => site) } let(:tag_name) { "github_edit_link" } @@ -114,6 +115,21 @@ end end + context "paginated path" do + let(:pager) { make_pager(2) } + before do + page.dir = "page/2" + subject.send(:site).pages << page + first_page = make_page({}, make_pager(1)) + subject.send(:site).pages << first_page + end + + it "outputs the proper link for subsequent pages" do + expect(page.path).to eql("page/2/page.md") + expect(subject.send(:page_path)).to eql("page.md") + end + end + context "parts" do it "builds the parts" do expected = [github["repository_url"], "edit/", branch.to_s, "/", "page.md"] diff --git a/spec/spec_helpers/fixture_helper.rb b/spec/spec_helpers/fixture_helper.rb index 2f2b134..9d76752 100644 --- a/spec/spec_helpers/fixture_helper.rb +++ b/spec/spec_helpers/fixture_helper.rb @@ -22,8 +22,15 @@ def config_defaults } end - def make_page(data = {}) - Jekyll::Page.new(site, config_defaults["source"], "", "page.md").tap { |page| page.data = data } + def make_page(data = {}, pager = nil) + data["paginated"] = true unless pager == nil + page = Jekyll::Page.new(site, config_defaults["source"], "", "page.md").tap { |page| page.data = data } + page.pager = pager + page + end + + def make_pager(page) + Pager.new(page) end def make_site(options = {}) @@ -35,4 +42,12 @@ def make_context(registers = {}, environments = {}) context = { :site => make_site, :page => make_page }.merge(registers) Liquid::Context.new(environments, {}, context) end + + class Pager + attr_accessor :page + + def initialize(page) + @page = page + end + end end From e23323f2fd8ff8819d0cb849ba8e026701fbc101 Mon Sep 17 00:00:00 2001 From: Parker Moore <237985+parkr@users.noreply.github.com> Date: Tue, 4 Apr 2023 10:15:12 -0700 Subject: [PATCH 5/6] fixture_helper: use just tap in make_page --- spec/spec_helpers/fixture_helper.rb | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/spec/spec_helpers/fixture_helper.rb b/spec/spec_helpers/fixture_helper.rb index 9d76752..47e7dfc 100644 --- a/spec/spec_helpers/fixture_helper.rb +++ b/spec/spec_helpers/fixture_helper.rb @@ -23,10 +23,11 @@ def config_defaults end def make_page(data = {}, pager = nil) - data["paginated"] = true unless pager == nil - page = Jekyll::Page.new(site, config_defaults["source"], "", "page.md").tap { |page| page.data = data } - page.pager = pager - page + data["paginated"] = true unless pager.nil? + Jekyll::Page.new(site, config_defaults["source"], "", "page.md").tap do |page| + page.data = data + page.pager = pager + end end def make_pager(page) From 16e82e432ac4c7db4333e1e4acba549b0083b024 Mon Sep 17 00:00:00 2001 From: Chris Buckley Date: Fri, 14 Apr 2023 13:59:12 +0000 Subject: [PATCH 6/6] Set page dir directly in spec helper --- spec/edit_link_tag_spec.rb | 1 - spec/spec_helpers/fixture_helper.rb | 3 ++- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/spec/edit_link_tag_spec.rb b/spec/edit_link_tag_spec.rb index acea78e..9db22ad 100644 --- a/spec/edit_link_tag_spec.rb +++ b/spec/edit_link_tag_spec.rb @@ -118,7 +118,6 @@ context "paginated path" do let(:pager) { make_pager(2) } before do - page.dir = "page/2" subject.send(:site).pages << page first_page = make_page({}, make_pager(1)) subject.send(:site).pages << first_page diff --git a/spec/spec_helpers/fixture_helper.rb b/spec/spec_helpers/fixture_helper.rb index 47e7dfc..6654217 100644 --- a/spec/spec_helpers/fixture_helper.rb +++ b/spec/spec_helpers/fixture_helper.rb @@ -24,7 +24,8 @@ def config_defaults def make_page(data = {}, pager = nil) data["paginated"] = true unless pager.nil? - Jekyll::Page.new(site, config_defaults["source"], "", "page.md").tap do |page| + dir = pager&.page.to_i > 1 ? "page/#{pager.page}/" : "" + Jekyll::Page.new(site, config_defaults["source"], dir, "page.md").tap do |page| page.data = data page.pager = pager end