From 1c0f21230d6a605c0bef498c695e8a8b1316eaf2 Mon Sep 17 00:00:00 2001 From: Marcus Stollsteimer Date: Wed, 6 Jul 2016 14:30:30 +0200 Subject: [PATCH] Stringify configuration overrides before first use This makes sure that overrides for Jekyll.configuration all have string keys before their first use, particularly also the "config" and "skip_config_files" options. --- lib/jekyll.rb | 1 + test/test_configuration.rb | 12 ++++++++++++ 2 files changed, 13 insertions(+) diff --git a/lib/jekyll.rb b/lib/jekyll.rb index db1e40cd..a9fe696f 100644 --- a/lib/jekyll.rb +++ b/lib/jekyll.rb @@ -101,6 +101,7 @@ module Jekyll # Returns the final configuration Hash. def configuration(override = {}) config = Configuration.new + override = Configuration[override].stringify_keys unless override.delete("skip_config_files") config = config.read_config_files(config.config_files(override)) end diff --git a/test/test_configuration.rb b/test/test_configuration.rb index dd05a9e7..90bcc822 100644 --- a/test/test_configuration.rb +++ b/test/test_configuration.rb @@ -334,6 +334,18 @@ class TestConfiguration < JekyllUnitTest Jekyll.configuration(test_config.merge({ "config" => @paths[:other] })) end + should "load different config if specified with symbol key" do + allow(SafeYAML).to receive(:load_file).with(@paths[:default]).and_return({}) + allow(SafeYAML) + .to receive(:load_file) + .with(@paths[:other]) + .and_return({ "baseurl" => "http://example.com" }) + allow($stdout).to receive(:puts).with("Configuration file: #{@paths[:other]}") + assert_equal \ + site_configuration({ "baseurl" => "http://example.com" }), + Jekyll.configuration(test_config.merge({ :config => @paths[:other] })) + end + should "load default config if path passed is empty" do allow(SafeYAML).to receive(:load_file).with(@paths[:default]).and_return({}) allow($stdout).to receive(:puts).with("Configuration file: #{@paths[:default]}")