diff --git a/lib/jekyll/commands/doctor.rb b/lib/jekyll/commands/doctor.rb index 59004c96049..5c235dac132 100644 --- a/lib/jekyll/commands/doctor.rb +++ b/lib/jekyll/commands/doctor.rb @@ -1,3 +1,5 @@ +require "addressable/uri" + module Jekyll module Commands class Doctor < Command @@ -36,6 +38,7 @@ def healthy?(site) !deprecated_relative_permalinks(site), !conflicting_urls(site), !urls_only_differ_by_case(site), + proper_site_url?(site), ].all? end @@ -91,6 +94,15 @@ def urls_only_differ_by_case(site) urls_only_differ_by_case end + def proper_site_url?(site) + url = site.config["url"] + [ + url_exists?(url), + url_valid?(url), + url_absolute(url), + ].all? + end + private def collect_urls(urls, things, destination) things.each do |thing| @@ -110,6 +122,29 @@ def case_insensitive_urls(things, destination) (memo[dest.downcase] ||= []) << dest end end + + def url_exists?(url) + return true unless url.nil? || url.empty? + Jekyll.logger.warn "Warning:", "You didn't set an URL in the config file, "\ + "you may encounter problems with some plugins." + false + end + + def url_valid?(url) + Addressable::URI.parse(url) + true + rescue + Jekyll.logger.warn "Warning:", "The site URL does not seem to be valid, "\ + "check the value of `url` in your config file." + false + end + + def url_absolute(url) + return true if Addressable::URI.parse(url).absolute? + Jekyll.logger.warn "Warning:", "Your site URL does not seem to be absolute, "\ + "check the value of `url` in your config file." + false + end end end end