diff --git a/lib/jekyll-github-metadata/edit-link-tag.rb b/lib/jekyll-github-metadata/edit-link-tag.rb index c150646..8b759e8 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,14 @@ def parts memoize_conditionally { [repository_url, "edit/", branch, source_path, page_path] } end + def page_path + return page["path"] unless page["paginated"] + + site.pages.each do |page| + return page["path"] if page.pager && page.pager.page == 1 + end + end + def parts_normalized memoize_conditionally do parts.map.with_index do |part, index| diff --git a/spec/edit_link_tag_spec.rb b/spec/edit_link_tag_spec.rb index 5f8019f..9db22ad 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,20 @@ end end + context "paginated path" do + let(:pager) { make_pager(2) } + before do + 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..6654217 100644 --- a/spec/spec_helpers/fixture_helper.rb +++ b/spec/spec_helpers/fixture_helper.rb @@ -22,8 +22,17 @@ 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? + 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 + end + + def make_pager(page) + Pager.new(page) end def make_site(options = {}) @@ -35,4 +44,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