From 47babef79a4aa4a13ca9645d9a5280f911ca50da Mon Sep 17 00:00:00 2001 From: Parker Moore Date: Sun, 16 Feb 2014 22:42:38 -0500 Subject: [PATCH 1/3] Make the layouts: config key relative to CWD or to Source Fixes #1576. --- lib/jekyll/layout_reader.rb | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/lib/jekyll/layout_reader.rb b/lib/jekyll/layout_reader.rb index 1b07c724..20ac25c0 100644 --- a/lib/jekyll/layout_reader.rb +++ b/lib/jekyll/layout_reader.rb @@ -34,7 +34,22 @@ module Jekyll end def layout_directory - File.join(site.source, site.config['layouts']) + @layout_directory = (layout_directory_in_cwd || layout_directory_inside_source) + end + + def layout_directory_inside_source + # TODO: Fix for Windows + File.join(site.source, File.expand_path(site.config['layouts'], "/")) + end + + def layout_directory_in_cwd + # TODO: Fix on Windows + dir = File.join(Dir.pwd, File.expand_path(site.config['layouts'], '/')) + if Directory.exists?(dir) + dir + else + nil + end end end end From 1a879a04ab122e4c0f4420226bd2e55d578f4f5d Mon Sep 17 00:00:00 2001 From: Parker Moore Date: Sun, 16 Feb 2014 23:19:03 -0500 Subject: [PATCH 2/3] Add tests for determining source dir --- lib/jekyll/layout_reader.rb | 2 +- test/test_layout_reader.rb | 17 +++++++++++++++++ 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/lib/jekyll/layout_reader.rb b/lib/jekyll/layout_reader.rb index 20ac25c0..949a69ec 100644 --- a/lib/jekyll/layout_reader.rb +++ b/lib/jekyll/layout_reader.rb @@ -45,7 +45,7 @@ module Jekyll def layout_directory_in_cwd # TODO: Fix on Windows dir = File.join(Dir.pwd, File.expand_path(site.config['layouts'], '/')) - if Directory.exists?(dir) + if File.directory?(dir) dir else nil diff --git a/test/test_layout_reader.rb b/test/test_layout_reader.rb index eead655a..2bf50d7d 100644 --- a/test/test_layout_reader.rb +++ b/test/test_layout_reader.rb @@ -13,5 +13,22 @@ class TestLayoutReader < Test::Unit::TestCase layouts = LayoutReader.new(@site).read assert_equal ["default", "simple", "post/simple"].sort, layouts.keys.sort end + + context "when no _layouts directory exists in CWD" do + should "know to use the layout directory relative to the site source" do + assert_equal LayoutReader.new(@site).send(:layout_directory), source_dir("_layouts") + end + end + + context "when a _layouts directory exists in CWD" do + setup do + stub(File).directory? { true } + stub(Dir).pwd { source_dir("blah") } + end + + should "know to use the layout directory relative to CWD" do + assert_equal LayoutReader.new(@site).send(:layout_directory), source_dir("blah/_layouts") + end + end end end From b68229aa2caaaa82117e7a321fe3217b6643926d Mon Sep 17 00:00:00 2001 From: Matt Rogers Date: Mon, 17 Feb 2014 22:13:29 -0600 Subject: [PATCH 3/3] Make LayoutReader#layout_directory public. Since it's being used in a test, let's go ahead and expose it instead of dealing with using Object#send to send the message along. --- lib/jekyll/layout_reader.rb | 8 ++++---- test/test_layout_reader.rb | 4 ++-- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/lib/jekyll/layout_reader.rb b/lib/jekyll/layout_reader.rb index 949a69ec..66854339 100644 --- a/lib/jekyll/layout_reader.rb +++ b/lib/jekyll/layout_reader.rb @@ -14,6 +14,10 @@ module Jekyll @layouts end + def layout_directory + @layout_directory ||= (layout_directory_in_cwd || layout_directory_inside_source) + end + private def layout_entries @@ -33,10 +37,6 @@ module Jekyll Dir.chdir(directory) { yield } end - def layout_directory - @layout_directory = (layout_directory_in_cwd || layout_directory_inside_source) - end - def layout_directory_inside_source # TODO: Fix for Windows File.join(site.source, File.expand_path(site.config['layouts'], "/")) diff --git a/test/test_layout_reader.rb b/test/test_layout_reader.rb index 2bf50d7d..ff979c2b 100644 --- a/test/test_layout_reader.rb +++ b/test/test_layout_reader.rb @@ -16,7 +16,7 @@ class TestLayoutReader < Test::Unit::TestCase context "when no _layouts directory exists in CWD" do should "know to use the layout directory relative to the site source" do - assert_equal LayoutReader.new(@site).send(:layout_directory), source_dir("_layouts") + assert_equal LayoutReader.new(@site).layout_directory, source_dir("_layouts") end end @@ -27,7 +27,7 @@ class TestLayoutReader < Test::Unit::TestCase end should "know to use the layout directory relative to CWD" do - assert_equal LayoutReader.new(@site).send(:layout_directory), source_dir("blah/_layouts") + assert_equal LayoutReader.new(@site).layout_directory, source_dir("blah/_layouts") end end end