commit
7197028cd5
|
@ -12,7 +12,6 @@ AllCops:
|
||||||
- lib/jekyll/filters.rb
|
- lib/jekyll/filters.rb
|
||||||
- lib/jekyll/regenerator.rb
|
- lib/jekyll/regenerator.rb
|
||||||
- lib/jekyll/renderer.rb
|
- lib/jekyll/renderer.rb
|
||||||
- lib/jekyll/site.rb
|
|
||||||
- lib/jekyll/static_file.rb
|
- lib/jekyll/static_file.rb
|
||||||
- lib/jekyll/utils.rb
|
- lib/jekyll/utils.rb
|
||||||
- bin/**/*
|
- bin/**/*
|
||||||
|
@ -28,7 +27,7 @@ Lint/UselessAccessModifier:
|
||||||
Metrics/AbcSize:
|
Metrics/AbcSize:
|
||||||
Max: 20
|
Max: 20
|
||||||
Metrics/ClassLength:
|
Metrics/ClassLength:
|
||||||
Max: 240
|
Max: 300
|
||||||
Exclude:
|
Exclude:
|
||||||
- !ruby/regexp /features\/.*.rb$/
|
- !ruby/regexp /features\/.*.rb$/
|
||||||
- !ruby/regexp /test\/.*.rb$/
|
- !ruby/regexp /test\/.*.rb$/
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
# encoding: UTF-8
|
# encoding: UTF-8
|
||||||
require 'csv'
|
require "csv"
|
||||||
|
|
||||||
module Jekyll
|
module Jekyll
|
||||||
class Site
|
class Site
|
||||||
|
@ -18,8 +18,8 @@ module Jekyll
|
||||||
# config - A Hash containing site configuration details.
|
# config - A Hash containing site configuration details.
|
||||||
def initialize(config)
|
def initialize(config)
|
||||||
# Source and destination may not be changed after the site has been created.
|
# Source and destination may not be changed after the site has been created.
|
||||||
@source = File.expand_path(config['source']).freeze
|
@source = File.expand_path(config["source"]).freeze
|
||||||
@dest = File.expand_path(config['destination']).freeze
|
@dest = File.expand_path(config["destination"]).freeze
|
||||||
|
|
||||||
self.config = config
|
self.config = config
|
||||||
|
|
||||||
|
@ -49,19 +49,12 @@ module Jekyll
|
||||||
self.send("#{opt}=", config[opt])
|
self.send("#{opt}=", config[opt])
|
||||||
end
|
end
|
||||||
|
|
||||||
self.plugin_manager = Jekyll::PluginManager.new(self)
|
configure_plugins
|
||||||
self.plugins = plugin_manager.plugins_path
|
configure_theme
|
||||||
|
configure_include_paths
|
||||||
|
configure_file_read_opts
|
||||||
|
|
||||||
self.theme = nil
|
self.permalink_style = config["permalink"].to_sym
|
||||||
self.theme = Jekyll::Theme.new(config["theme"]) if config["theme"]
|
|
||||||
|
|
||||||
@includes_load_paths = Array(in_source_dir(config["includes_dir"].to_s))
|
|
||||||
@includes_load_paths << theme.includes_path if self.theme
|
|
||||||
|
|
||||||
self.file_read_opts = {}
|
|
||||||
self.file_read_opts[:encoding] = config['encoding'] if config['encoding']
|
|
||||||
|
|
||||||
self.permalink_style = config['permalink'].to_sym
|
|
||||||
|
|
||||||
@config
|
@config
|
||||||
end
|
end
|
||||||
|
@ -80,7 +73,7 @@ module Jekyll
|
||||||
end
|
end
|
||||||
|
|
||||||
def print_stats
|
def print_stats
|
||||||
if @config['profile']
|
if @config["profile"]
|
||||||
puts @liquid_renderer.stats_table
|
puts @liquid_renderer.stats_table
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -89,7 +82,11 @@ module Jekyll
|
||||||
#
|
#
|
||||||
# Returns nothing
|
# Returns nothing
|
||||||
def reset
|
def reset
|
||||||
self.time = (config['time'] ? Utils.parse_date(config['time'].to_s, "Invalid time in _config.yml.") : Time.now)
|
if config["time"]
|
||||||
|
self.time = Utils.parse_date(config["time"].to_s, "Invalid time in _config.yml.")
|
||||||
|
else
|
||||||
|
self.time = Time.now
|
||||||
|
end
|
||||||
self.layouts = {}
|
self.layouts = {}
|
||||||
self.pages = []
|
self.pages = []
|
||||||
self.static_files = []
|
self.static_files = []
|
||||||
|
@ -123,18 +120,23 @@ module Jekyll
|
||||||
dest_pathname = Pathname.new(dest)
|
dest_pathname = Pathname.new(dest)
|
||||||
Pathname.new(source).ascend do |path|
|
Pathname.new(source).ascend do |path|
|
||||||
if path == dest_pathname
|
if path == dest_pathname
|
||||||
raise Errors::FatalException.new "Destination directory cannot be or contain the Source directory."
|
raise(
|
||||||
|
Errors::FatalException,
|
||||||
|
"Destination directory cannot be or contain the Source directory."
|
||||||
|
)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
# The list of collections and their corresponding Jekyll::Collection instances.
|
# The list of collections and their corresponding Jekyll::Collection instances.
|
||||||
# If config['collections'] is set, a new instance is created for each item in the collection.
|
# If config['collections'] is set, a new instance is created
|
||||||
# If config['collections'] is not set, a new hash is returned.
|
# for each item in the collection, a new hash is returned otherwise.
|
||||||
#
|
#
|
||||||
# Returns a Hash containing collection name-to-instance pairs.
|
# Returns a Hash containing collection name-to-instance pairs.
|
||||||
def collections
|
def collections
|
||||||
@collections ||= Hash[collection_names.map { |coll| [coll, Jekyll::Collection.new(self, coll)] } ]
|
@collections ||= Hash[collection_names.map do |coll|
|
||||||
|
[coll, Jekyll::Collection.new(self, coll)]
|
||||||
|
end]
|
||||||
end
|
end
|
||||||
|
|
||||||
# The list of collection names.
|
# The list of collection names.
|
||||||
|
@ -142,11 +144,11 @@ module Jekyll
|
||||||
# Returns an array of collection names from the configuration,
|
# Returns an array of collection names from the configuration,
|
||||||
# or an empty array if the `collections` key is not set.
|
# or an empty array if the `collections` key is not set.
|
||||||
def collection_names
|
def collection_names
|
||||||
case config['collections']
|
case config["collections"]
|
||||||
when Hash
|
when Hash
|
||||||
config['collections'].keys
|
config["collections"].keys
|
||||||
when Array
|
when Array
|
||||||
config['collections']
|
config["collections"]
|
||||||
when nil
|
when nil
|
||||||
[]
|
[]
|
||||||
else
|
else
|
||||||
|
@ -182,26 +184,15 @@ module Jekyll
|
||||||
|
|
||||||
Jekyll::Hooks.trigger :site, :pre_render, self, payload
|
Jekyll::Hooks.trigger :site, :pre_render, self, payload
|
||||||
|
|
||||||
collections.each do |_, collection|
|
render_docs(payload)
|
||||||
collection.docs.each do |document|
|
render_pages(payload)
|
||||||
if regenerator.regenerate?(document)
|
|
||||||
document.output = Jekyll::Renderer.new(self, document, payload).run
|
|
||||||
document.trigger_hooks(:post_render)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
pages.flatten.each do |page|
|
|
||||||
if regenerator.regenerate?(page)
|
|
||||||
page.output = Jekyll::Renderer.new(self, page, payload).run
|
|
||||||
page.trigger_hooks(:post_render)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
Jekyll::Hooks.trigger :site, :post_render, self, payload
|
Jekyll::Hooks.trigger :site, :post_render, self, payload
|
||||||
|
# rubocop: disable HandleExceptions
|
||||||
rescue Errno::ENOENT
|
rescue Errno::ENOENT
|
||||||
# ignore missing layout dir
|
# ignore missing layout dir
|
||||||
end
|
end
|
||||||
|
# rubocop: enable HandleExceptions
|
||||||
|
|
||||||
# Remove orphaned files and empty directories in destination.
|
# Remove orphaned files and empty directories in destination.
|
||||||
#
|
#
|
||||||
|
@ -222,7 +213,7 @@ module Jekyll
|
||||||
end
|
end
|
||||||
|
|
||||||
def posts
|
def posts
|
||||||
collections['posts'] ||= Collection.new(self, 'posts')
|
collections["posts"] ||= Collection.new(self, "posts")
|
||||||
end
|
end
|
||||||
|
|
||||||
# Construct a Hash of Posts indexed by the specified Post attribute.
|
# Construct a Hash of Posts indexed by the specified Post attribute.
|
||||||
|
@ -242,17 +233,19 @@ module Jekyll
|
||||||
# Build a hash map based on the specified post attribute ( post attr =>
|
# Build a hash map based on the specified post attribute ( post attr =>
|
||||||
# array of posts ) then sort each array in reverse order.
|
# array of posts ) then sort each array in reverse order.
|
||||||
hash = Hash.new { |h, key| h[key] = [] }
|
hash = Hash.new { |h, key| h[key] = [] }
|
||||||
posts.docs.each { |p| p.data[post_attr].each { |t| hash[t] << p } if p.data[post_attr] }
|
posts.docs.each do |p|
|
||||||
|
p.data[post_attr].each { |t| hash[t] << p } if p.data[post_attr]
|
||||||
|
end
|
||||||
hash.values.each { |posts| posts.sort!.reverse! }
|
hash.values.each { |posts| posts.sort!.reverse! }
|
||||||
hash
|
hash
|
||||||
end
|
end
|
||||||
|
|
||||||
def tags
|
def tags
|
||||||
post_attr_hash('tags')
|
post_attr_hash("tags")
|
||||||
end
|
end
|
||||||
|
|
||||||
def categories
|
def categories
|
||||||
post_attr_hash('categories')
|
post_attr_hash("categories")
|
||||||
end
|
end
|
||||||
|
|
||||||
# Prepare site data for site payload. The method maintains backward compatibility
|
# Prepare site data for site payload. The method maintains backward compatibility
|
||||||
|
@ -260,7 +253,7 @@ module Jekyll
|
||||||
#
|
#
|
||||||
# Returns the Hash to be hooked to site.data.
|
# Returns the Hash to be hooked to site.data.
|
||||||
def site_data
|
def site_data
|
||||||
config['data'] || data
|
config["data"] || data
|
||||||
end
|
end
|
||||||
|
|
||||||
# The Hash payload containing site-wide data.
|
# The Hash payload containing site-wide data.
|
||||||
|
@ -306,7 +299,7 @@ module Jekyll
|
||||||
#
|
#
|
||||||
# Returns
|
# Returns
|
||||||
def relative_permalinks_are_deprecated
|
def relative_permalinks_are_deprecated
|
||||||
if config['relative_permalinks']
|
if config["relative_permalinks"]
|
||||||
Jekyll.logger.abort_with "Since v3.0, permalinks for pages" \
|
Jekyll.logger.abort_with "Since v3.0, permalinks for pages" \
|
||||||
" in subfolders must be relative to the" \
|
" in subfolders must be relative to the" \
|
||||||
" site source directory, not the parent" \
|
" site source directory, not the parent" \
|
||||||
|
@ -351,7 +344,7 @@ module Jekyll
|
||||||
#
|
#
|
||||||
# Returns a Boolean: true for a full rebuild, false for normal build
|
# Returns a Boolean: true for a full rebuild, false for normal build
|
||||||
def incremental?(override = {})
|
def incremental?(override = {})
|
||||||
override['incremental'] || config['incremental']
|
override["incremental"] || config["incremental"]
|
||||||
end
|
end
|
||||||
|
|
||||||
# Returns the publisher or creates a new publisher if it doesn't
|
# Returns the publisher or creates a new publisher if it doesn't
|
||||||
|
@ -399,11 +392,10 @@ module Jekyll
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
private
|
|
||||||
|
|
||||||
# Limits the current posts; removes the posts which exceed the limit_posts
|
# Limits the current posts; removes the posts which exceed the limit_posts
|
||||||
#
|
#
|
||||||
# Returns nothing
|
# Returns nothing
|
||||||
|
private
|
||||||
def limit_posts!
|
def limit_posts!
|
||||||
if limit_posts > 0
|
if limit_posts > 0
|
||||||
limit = posts.docs.length < limit_posts ? posts.docs.length : limit_posts
|
limit = posts.docs.length < limit_posts ? posts.docs.length : limit_posts
|
||||||
|
@ -415,8 +407,55 @@ module Jekyll
|
||||||
# already exist.
|
# already exist.
|
||||||
#
|
#
|
||||||
# Returns The Cleaner
|
# Returns The Cleaner
|
||||||
|
private
|
||||||
def site_cleaner
|
def site_cleaner
|
||||||
@site_cleaner ||= Cleaner.new(self)
|
@site_cleaner ||= Cleaner.new(self)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
private
|
||||||
|
def configure_plugins
|
||||||
|
self.plugin_manager = Jekyll::PluginManager.new(self)
|
||||||
|
self.plugins = plugin_manager.plugins_path
|
||||||
|
end
|
||||||
|
|
||||||
|
private
|
||||||
|
def configure_theme
|
||||||
|
self.theme = nil
|
||||||
|
self.theme = Jekyll::Theme.new(config["theme"]) if config["theme"]
|
||||||
|
end
|
||||||
|
|
||||||
|
private
|
||||||
|
def configure_include_paths
|
||||||
|
@includes_load_paths = Array(in_source_dir(config["includes_dir"].to_s))
|
||||||
|
@includes_load_paths << theme.includes_path if self.theme
|
||||||
|
end
|
||||||
|
|
||||||
|
private
|
||||||
|
def configure_file_read_opts
|
||||||
|
self.file_read_opts = {}
|
||||||
|
self.file_read_opts[:encoding] = config["encoding"] if config["encoding"]
|
||||||
|
end
|
||||||
|
|
||||||
|
private
|
||||||
|
def render_docs(payload)
|
||||||
|
collections.each do |_, collection|
|
||||||
|
collection.docs.each do |document|
|
||||||
|
if regenerator.regenerate?(document)
|
||||||
|
document.output = Jekyll::Renderer.new(self, document, payload).run
|
||||||
|
document.trigger_hooks(:post_render)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
private
|
||||||
|
def render_pages(payload)
|
||||||
|
pages.flatten.each do |page|
|
||||||
|
if regenerator.regenerate?(page)
|
||||||
|
page.output = Jekyll::Renderer.new(self, page, payload).run
|
||||||
|
page.trigger_hooks(:post_render)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in New Issue