From a564b23ca50c65d2bae44f3c12ae2eda3c4bfbda Mon Sep 17 00:00:00 2001 From: Ben Balter <282759+benbalter@users.noreply.github.com> Date: Sun, 30 Jul 2017 15:12:42 -0400 Subject: [PATCH] Backport memoize-document-url from #6266 to 3.5-stable [merge conflicts] --- lib/jekyll/filters/url_filters.rb | 2 +- test/test_filters.rb | 16 ++++++++++++++++ 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/lib/jekyll/filters/url_filters.rb b/lib/jekyll/filters/url_filters.rb index d308c9d0165..2715183580a 100644 --- a/lib/jekyll/filters/url_filters.rb +++ b/lib/jekyll/filters/url_filters.rb @@ -12,7 +12,7 @@ def absolute_url(input) return if input.nil? return input if Addressable::URI.parse(input.to_s).absolute? site = @context.registers[:site] - return relative_url(input) if site.config["url"].nil? + return relative_url(input).to_s if site.config["url"].nil? Addressable::URI.parse( site.config["url"].to_s + relative_url(input) ).normalize.to_s diff --git a/test/test_filters.rb b/test/test_filters.rb index 293341bc939..72a1fd84afd 100644 --- a/test/test_filters.rb +++ b/test/test_filters.rb @@ -13,6 +13,16 @@ def initialize(opts = {}) end end + class Value + def initialize(value) + @value = value + end + + def to_s + @value.respond_to?(:call) ? @value.call : @value.to_s + end + end + def make_filter_mock(opts = {}) JekyllFilter.new(site_configuration(opts)).tap do |f| tz = f.site.config["timezone"] @@ -510,6 +520,12 @@ def select; end url << "foo" assert_equal "/front_matter.erb", page.url end + + should "transform the input baseurl to a string" do + page_url = "/my-page.html" + filter = make_filter_mock({ "baseurl" => Value.new(proc { "/baseurl/" }) }) + assert_equal "/baseurl#{page_url}", filter.relative_url(page_url) + end end context "strip_index filter" do