Make _includes directory configurable; closes #2684
and rename `plugins`, `layouts` and `data_source` directories for consistency
This commit is contained in:
parent
407fc82b2d
commit
ac56e9dd16
|
@ -22,8 +22,8 @@ Mercenary.program(:jekyll) do |p|
|
||||||
p.option 'source', '-s', '--source [DIR]', 'Source directory (defaults to ./)'
|
p.option 'source', '-s', '--source [DIR]', 'Source directory (defaults to ./)'
|
||||||
p.option 'destination', '-d', '--destination [DIR]', 'Destination directory (defaults to ./_site)'
|
p.option 'destination', '-d', '--destination [DIR]', 'Destination directory (defaults to ./_site)'
|
||||||
p.option 'safe', '--safe', 'Safe mode (defaults to false)'
|
p.option 'safe', '--safe', 'Safe mode (defaults to false)'
|
||||||
p.option 'plugins', '-p', '--plugins PLUGINS_DIR1[,PLUGINS_DIR2[,...]]', Array, 'Plugins directory (defaults to ./_plugins)'
|
p.option 'plugins_dir', '-p', '--plugins PLUGINS_DIR1[,PLUGINS_DIR2[,...]]', Array, 'Plugins directory (defaults to ./_plugins)'
|
||||||
p.option 'layouts', '--layouts DIR', String, 'Layouts directory (defaults to ./_layouts)'
|
p.option 'layouts_dir', '--layouts DIR', String, 'Layouts directory (defaults to ./_layouts)'
|
||||||
|
|
||||||
Jekyll::Command.subclasses.each { |c| c.init_with_program(p) }
|
Jekyll::Command.subclasses.each { |c| c.init_with_program(p) }
|
||||||
|
|
||||||
|
|
|
@ -224,7 +224,7 @@ Feature: Site configuration
|
||||||
| key | value |
|
| key | value |
|
||||||
| time | 2010-01-01 |
|
| time | 2010-01-01 |
|
||||||
| future | true |
|
| future | true |
|
||||||
| layouts | _theme |
|
| layouts_dir | _theme |
|
||||||
And I have a _posts directory
|
And I have a _posts directory
|
||||||
And I have the following posts:
|
And I have the following posts:
|
||||||
| title | date | layout | content |
|
| title | date | layout | content |
|
||||||
|
|
|
@ -9,9 +9,10 @@ module Jekyll
|
||||||
# Where things are
|
# Where things are
|
||||||
'source' => Dir.pwd,
|
'source' => Dir.pwd,
|
||||||
'destination' => File.join(Dir.pwd, '_site'),
|
'destination' => File.join(Dir.pwd, '_site'),
|
||||||
'plugins' => '_plugins',
|
'plugins_dir' => '_plugins',
|
||||||
'layouts' => '_layouts',
|
'layouts_dir' => '_layouts',
|
||||||
'data_source' => '_data',
|
'data_dir' => '_data',
|
||||||
|
'includes_dir' => '_includes',
|
||||||
'collections' => nil,
|
'collections' => nil,
|
||||||
|
|
||||||
# Handling Reading
|
# Handling Reading
|
||||||
|
@ -263,6 +264,33 @@ module Jekyll
|
||||||
"`_config.yml` file."
|
"`_config.yml` file."
|
||||||
end
|
end
|
||||||
|
|
||||||
|
if config.key? 'plugins'
|
||||||
|
Jekyll::Deprecator.deprecation_message "The 'plugins'" +
|
||||||
|
" configuration option has been renamed to 'plugins_dir'." +
|
||||||
|
" Please update your config file accordingly."
|
||||||
|
# copy but don't overwrite:
|
||||||
|
config['plugins_dir'] = config['plugins'] unless config.key?('plugins_dir')
|
||||||
|
config.delete('plugins')
|
||||||
|
end
|
||||||
|
|
||||||
|
if config.key? 'layouts'
|
||||||
|
Jekyll::Deprecator.deprecation_message "The 'layouts'" +
|
||||||
|
" configuration option has been renamed to 'layouts_dir'." +
|
||||||
|
" Please update your config file accordingly."
|
||||||
|
# copy but don't overwrite:
|
||||||
|
config['layouts_dir'] = config['layouts'] unless config.key?('layouts_dir')
|
||||||
|
config.delete('layouts')
|
||||||
|
end
|
||||||
|
|
||||||
|
if config.key? 'data_source'
|
||||||
|
Jekyll::Deprecator.deprecation_message "The 'data_source'" +
|
||||||
|
" configuration option has been renamed to 'data_dir'." +
|
||||||
|
" Please update your config file accordingly."
|
||||||
|
# copy but don't overwrite:
|
||||||
|
config['data_dir'] = config['data_source'] unless config.key?('data_dir')
|
||||||
|
config.delete('data_source')
|
||||||
|
end
|
||||||
|
|
||||||
config
|
config
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -211,7 +211,7 @@ module Jekyll
|
||||||
self.output = render_liquid(layout.content,
|
self.output = render_liquid(layout.content,
|
||||||
payload,
|
payload,
|
||||||
info,
|
info,
|
||||||
File.join(site.config['layouts'], layout.name))
|
File.join(site.config['layouts_dir'], layout.name))
|
||||||
|
|
||||||
# Add layout to dependency tree
|
# Add layout to dependency tree
|
||||||
site.regenerator.add_dependency(
|
site.regenerator.add_dependency(
|
||||||
|
|
|
@ -82,10 +82,10 @@ module Jekyll
|
||||||
#
|
#
|
||||||
# Returns an Array of plugin search paths
|
# Returns an Array of plugin search paths
|
||||||
def plugins_path
|
def plugins_path
|
||||||
if (site.config['plugins'] == Jekyll::Configuration::DEFAULTS['plugins'])
|
if (site.config['plugins_dir'] == Jekyll::Configuration::DEFAULTS['plugins_dir'])
|
||||||
[site.in_source_dir(site.config['plugins'])]
|
[site.in_source_dir(site.config['plugins_dir'])]
|
||||||
else
|
else
|
||||||
Array(site.config['plugins']).map { |d| File.expand_path(d) }
|
Array(site.config['plugins_dir']).map { |d| File.expand_path(d) }
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -16,7 +16,7 @@ module Jekyll
|
||||||
@site.layouts = LayoutReader.new(site).read
|
@site.layouts = LayoutReader.new(site).read
|
||||||
read_directories
|
read_directories
|
||||||
sort_files!
|
sort_files!
|
||||||
@site.data = DataReader.new(site).read(site.config['data_source'])
|
@site.data = DataReader.new(site).read(site.config['data_dir'])
|
||||||
CollectionReader.new(site).read
|
CollectionReader.new(site).read
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -38,11 +38,11 @@ module Jekyll
|
||||||
end
|
end
|
||||||
|
|
||||||
def layout_directory_inside_source
|
def layout_directory_inside_source
|
||||||
site.in_source_dir(site.config['layouts'])
|
site.in_source_dir(site.config['layouts_dir'])
|
||||||
end
|
end
|
||||||
|
|
||||||
def layout_directory_in_cwd
|
def layout_directory_in_cwd
|
||||||
dir = Jekyll.sanitized_path(Dir.pwd, site.config['layouts'])
|
dir = Jekyll.sanitized_path(Dir.pwd, site.config['layouts_dir'])
|
||||||
if File.directory?(dir) && !site.safe
|
if File.directory?(dir) && !site.safe
|
||||||
dir
|
dir
|
||||||
else
|
else
|
||||||
|
|
|
@ -138,7 +138,7 @@ module Jekyll
|
||||||
layout.content,
|
layout.content,
|
||||||
payload,
|
payload,
|
||||||
info,
|
info,
|
||||||
File.join(site.config['layouts'], layout.name)
|
File.join(site.config['layouts_dir'], layout.name)
|
||||||
)
|
)
|
||||||
|
|
||||||
# Add layout to dependency tree
|
# Add layout to dependency tree
|
||||||
|
|
|
@ -20,7 +20,6 @@ module Jekyll
|
||||||
|
|
||||||
def initialize(tag_name, markup, tokens)
|
def initialize(tag_name, markup, tokens)
|
||||||
super
|
super
|
||||||
@includes_dir = tag_includes_dir
|
|
||||||
matched = markup.strip.match(VARIABLE_SYNTAX)
|
matched = markup.strip.match(VARIABLE_SYNTAX)
|
||||||
if matched
|
if matched
|
||||||
@file = matched['variable'].strip
|
@file = matched['variable'].strip
|
||||||
|
@ -100,12 +99,13 @@ eos
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def tag_includes_dir
|
def tag_includes_dir(context)
|
||||||
'_includes'.freeze
|
context.registers[:site].config['includes_dir'].freeze
|
||||||
end
|
end
|
||||||
|
|
||||||
def render(context)
|
def render(context)
|
||||||
site = context.registers[:site]
|
site = context.registers[:site]
|
||||||
|
@includes_dir = tag_includes_dir(context)
|
||||||
dir = resolved_includes_dir(context)
|
dir = resolved_includes_dir(context)
|
||||||
|
|
||||||
file = render_variable(context) || @file
|
file = render_variable(context) || @file
|
||||||
|
@ -161,7 +161,7 @@ eos
|
||||||
end
|
end
|
||||||
|
|
||||||
class IncludeRelativeTag < IncludeTag
|
class IncludeRelativeTag < IncludeTag
|
||||||
def tag_includes_dir
|
def tag_includes_dir(context)
|
||||||
'.'.freeze
|
'.'.freeze
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -465,12 +465,13 @@ file or on the command-line.
|
||||||
|
|
||||||
{% highlight yaml %}
|
{% highlight yaml %}
|
||||||
# Where things are
|
# Where things are
|
||||||
source: .
|
source: .
|
||||||
destination: ./_site
|
destination: ./_site
|
||||||
plugins: ./_plugins
|
plugins_dir: ./_plugins
|
||||||
layouts: ./_layouts
|
layouts_dir: ./_layouts
|
||||||
data_source: ./_data
|
data_dir: ./_data
|
||||||
collections: null
|
includes_dir: ./_includes
|
||||||
|
collections: null
|
||||||
|
|
||||||
# Handling Reading
|
# Handling Reading
|
||||||
safe: false
|
safe: false
|
||||||
|
|
|
@ -0,0 +1 @@
|
||||||
|
custom_included
|
|
@ -66,6 +66,9 @@ class TestConfiguration < JekyllUnitTest
|
||||||
"exclude" => "READ-ME.md, Gemfile,CONTRIBUTING.hello.markdown",
|
"exclude" => "READ-ME.md, Gemfile,CONTRIBUTING.hello.markdown",
|
||||||
"include" => "STOP_THE_PRESSES.txt,.heloses, .git",
|
"include" => "STOP_THE_PRESSES.txt,.heloses, .git",
|
||||||
"pygments" => true,
|
"pygments" => true,
|
||||||
|
"plugins" => true,
|
||||||
|
"layouts" => true,
|
||||||
|
"data_source" => true,
|
||||||
}]
|
}]
|
||||||
end
|
end
|
||||||
should "unset 'auto' and 'watch'" do
|
should "unset 'auto' and 'watch'" do
|
||||||
|
@ -93,6 +96,17 @@ class TestConfiguration < JekyllUnitTest
|
||||||
assert !@config.backwards_compatibilize.key?("pygments")
|
assert !@config.backwards_compatibilize.key?("pygments")
|
||||||
assert_equal @config.backwards_compatibilize["highlighter"], "pygments"
|
assert_equal @config.backwards_compatibilize["highlighter"], "pygments"
|
||||||
end
|
end
|
||||||
|
should "adjust directory names" do
|
||||||
|
assert @config.key?("plugins")
|
||||||
|
assert !@config.backwards_compatibilize.key?("plugins")
|
||||||
|
assert @config.backwards_compatibilize["plugins_dir"]
|
||||||
|
assert @config.key?("layouts")
|
||||||
|
assert !@config.backwards_compatibilize.key?("layouts")
|
||||||
|
assert @config.backwards_compatibilize["layouts_dir"]
|
||||||
|
assert @config.key?("data_source")
|
||||||
|
assert !@config.backwards_compatibilize.key?("data_source")
|
||||||
|
assert @config.backwards_compatibilize["data_dir"]
|
||||||
|
end
|
||||||
end
|
end
|
||||||
context "#fix_common_issues" do
|
context "#fix_common_issues" do
|
||||||
setup do
|
setup do
|
||||||
|
|
|
@ -13,22 +13,22 @@ class TestSite < JekyllUnitTest
|
||||||
end
|
end
|
||||||
|
|
||||||
should "have an array for plugins if passed as a string" do
|
should "have an array for plugins if passed as a string" do
|
||||||
site = Site.new(Jekyll::Configuration::DEFAULTS.merge({'plugins' => '/tmp/plugins'}))
|
site = Site.new(Jekyll::Configuration::DEFAULTS.merge({'plugins_dir' => '/tmp/plugins'}))
|
||||||
assert_equal ['/tmp/plugins'], site.plugins
|
assert_equal ['/tmp/plugins'], site.plugins
|
||||||
end
|
end
|
||||||
|
|
||||||
should "have an array for plugins if passed as an array" do
|
should "have an array for plugins if passed as an array" do
|
||||||
site = Site.new(Jekyll::Configuration::DEFAULTS.merge({'plugins' => ['/tmp/plugins', '/tmp/otherplugins']}))
|
site = Site.new(Jekyll::Configuration::DEFAULTS.merge({'plugins_dir' => ['/tmp/plugins', '/tmp/otherplugins']}))
|
||||||
assert_equal ['/tmp/plugins', '/tmp/otherplugins'], site.plugins
|
assert_equal ['/tmp/plugins', '/tmp/otherplugins'], site.plugins
|
||||||
end
|
end
|
||||||
|
|
||||||
should "have an empty array for plugins if nothing is passed" do
|
should "have an empty array for plugins if nothing is passed" do
|
||||||
site = Site.new(Jekyll::Configuration::DEFAULTS.merge({'plugins' => []}))
|
site = Site.new(Jekyll::Configuration::DEFAULTS.merge({'plugins_dir' => []}))
|
||||||
assert_equal [], site.plugins
|
assert_equal [], site.plugins
|
||||||
end
|
end
|
||||||
|
|
||||||
should "have an empty array for plugins if nil is passed" do
|
should "have an empty array for plugins if nil is passed" do
|
||||||
site = Site.new(Jekyll::Configuration::DEFAULTS.merge({'plugins' => nil}))
|
site = Site.new(Jekyll::Configuration::DEFAULTS.merge({'plugins_dir' => nil}))
|
||||||
assert_equal [], site.plugins
|
assert_equal [], site.plugins
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -600,6 +600,23 @@ CONTENT
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
context "with custom includes directory" do
|
||||||
|
setup do
|
||||||
|
content = <<CONTENT
|
||||||
|
---
|
||||||
|
title: custom includes directory
|
||||||
|
---
|
||||||
|
|
||||||
|
{% include custom.html %}
|
||||||
|
CONTENT
|
||||||
|
create_post(content, {'includes_dir' => '_includes_custom', 'permalink' => 'pretty', 'source' => source_dir, 'destination' => dest_dir, 'read_posts' => true})
|
||||||
|
end
|
||||||
|
|
||||||
|
should "include file from custom directory" do
|
||||||
|
assert_match "custom_included", @result
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
context "without parameters within if statement" do
|
context "without parameters within if statement" do
|
||||||
setup do
|
setup do
|
||||||
content = <<CONTENT
|
content = <<CONTENT
|
||||||
|
|
Loading…
Reference in New Issue