From 582165897de5ed40b09a1593d7437b933aebe63b Mon Sep 17 00:00:00 2001 From: Pat Hawks Date: Fri, 10 Nov 2017 10:35:44 -0600 Subject: [PATCH] Allow URL filters to work directly with documents (#6478) Merge pull request 6478 --- lib/jekyll/filters/url_filters.rb | 2 ++ test/test_filters.rb | 17 +++++++++++++++++ 2 files changed, 19 insertions(+) diff --git a/lib/jekyll/filters/url_filters.rb b/lib/jekyll/filters/url_filters.rb index 9d86a0fb..74844be4 100644 --- a/lib/jekyll/filters/url_filters.rb +++ b/lib/jekyll/filters/url_filters.rb @@ -12,6 +12,7 @@ module Jekyll # Returns the absolute URL as a String. def absolute_url(input) return if input.nil? + input = input.url if input.respond_to?(:url) return input if Addressable::URI.parse(input.to_s).absolute? site = @context.registers[:site] return relative_url(input) if site.config["url"].nil? @@ -28,6 +29,7 @@ module Jekyll # Returns a URL relative to the domain root as a String. def relative_url(input) return if input.nil? + input = input.url if input.respond_to?(:url) return input if Addressable::URI.parse(input.to_s).absolute? parts = [sanitized_baseurl, input] diff --git a/test/test_filters.rb b/test/test_filters.rb index 39f7a66f..8c892338 100644 --- a/test/test_filters.rb +++ b/test/test_filters.rb @@ -443,6 +443,23 @@ class TestFilters < JekyllUnitTest should "not raise a TypeError when passed a hash" do assert @filter.absolute_url({ "foo" => "bar" }) end + + context "with a document" do + setup do + @site = fixture_site({ + "collections" => ["methods"], + }) + @site.process + @document = @site.collections["methods"].docs.detect do |d| + d.relative_path == "_methods/configuration.md" + end + end + + should "make a url" do + expected = "http://example.com/base/methods/configuration.html" + assert_equal expected, @filter.absolute_url(@document) + end + end end context "relative_url filter" do