180 lines
5.6 KiB
Ruby
180 lines
5.6 KiB
Ruby
$:.unshift File.dirname(__FILE__) # For use/testing when no gem is installed
|
|
|
|
# Require all of the Ruby files in the given directory.
|
|
#
|
|
# path - The String relative path from here to the directory.
|
|
#
|
|
# Returns nothing.
|
|
def require_all(path)
|
|
glob = File.join(File.dirname(__FILE__), path, '*.rb')
|
|
Dir[glob].each do |f|
|
|
require f
|
|
end
|
|
end
|
|
|
|
# rubygems
|
|
require 'rubygems'
|
|
|
|
# stdlib
|
|
require 'fileutils'
|
|
require 'time'
|
|
require 'English'
|
|
require 'pathname'
|
|
require 'logger'
|
|
require 'set'
|
|
|
|
# 3rd party
|
|
require 'safe_yaml/load'
|
|
require 'liquid'
|
|
require 'kramdown'
|
|
require 'colorator'
|
|
|
|
SafeYAML::OPTIONS[:suppress_warnings] = true
|
|
Liquid::Template.error_mode = :strict
|
|
|
|
module Jekyll
|
|
|
|
# internal requires
|
|
autoload :Cleaner, 'jekyll/cleaner'
|
|
autoload :Collection, 'jekyll/collection'
|
|
autoload :Configuration, 'jekyll/configuration'
|
|
autoload :Convertible, 'jekyll/convertible'
|
|
autoload :Deprecator, 'jekyll/deprecator'
|
|
autoload :Document, 'jekyll/document'
|
|
autoload :Draft, 'jekyll/draft'
|
|
autoload :EntryFilter, 'jekyll/entry_filter'
|
|
autoload :Errors, 'jekyll/errors'
|
|
autoload :Excerpt, 'jekyll/excerpt'
|
|
autoload :External, 'jekyll/external'
|
|
autoload :Filters, 'jekyll/filters'
|
|
autoload :FrontmatterDefaults, 'jekyll/frontmatter_defaults'
|
|
autoload :Layout, 'jekyll/layout'
|
|
autoload :LayoutReader, 'jekyll/layout_reader'
|
|
autoload :LogAdapter, 'jekyll/log_adapter'
|
|
autoload :Page, 'jekyll/page'
|
|
autoload :PluginManager, 'jekyll/plugin_manager'
|
|
autoload :Post, 'jekyll/post'
|
|
autoload :Publisher, 'jekyll/publisher'
|
|
autoload :Regenerator, 'jekyll/regenerator'
|
|
autoload :RelatedPosts, 'jekyll/related_posts'
|
|
autoload :Renderer, 'jekyll/renderer'
|
|
autoload :Site, 'jekyll/site'
|
|
autoload :StaticFile, 'jekyll/static_file'
|
|
autoload :Stevenson, 'jekyll/stevenson'
|
|
autoload :URL, 'jekyll/url'
|
|
autoload :Utils, 'jekyll/utils'
|
|
autoload :VERSION, 'jekyll/version'
|
|
|
|
# extensions
|
|
require 'jekyll/plugin'
|
|
require 'jekyll/converter'
|
|
require 'jekyll/generator'
|
|
require 'jekyll/command'
|
|
require 'jekyll/liquid_extensions'
|
|
|
|
class << self
|
|
# Public: Tells you which Jekyll environment you are building in so you can skip tasks
|
|
# if you need to. This is useful when doing expensive compression tasks on css and
|
|
# images and allows you to skip that when working in development.
|
|
|
|
def env
|
|
ENV["JEKYLL_ENV"] || "development"
|
|
end
|
|
|
|
# Public: Generate a Jekyll configuration Hash by merging the default
|
|
# options with anything in _config.yml, and adding the given options on top.
|
|
#
|
|
# override - A Hash of config directives that override any options in both
|
|
# the defaults and the config file. See Jekyll::Configuration::DEFAULTS for a
|
|
# list of option names and their defaults.
|
|
#
|
|
# Returns the final configuration Hash.
|
|
def configuration(override = Hash.new)
|
|
config = Configuration[Configuration::DEFAULTS]
|
|
override = Configuration[override].stringify_keys
|
|
unless override.delete('skip_config_files')
|
|
config = config.read_config_files(config.config_files(override))
|
|
end
|
|
|
|
# Merge DEFAULTS < _config.yml < override
|
|
config = Utils.deep_merge_hashes(config, override).stringify_keys
|
|
set_timezone(config['timezone']) if config['timezone']
|
|
|
|
config
|
|
end
|
|
|
|
# Public: Set the TZ environment variable to use the timezone specified
|
|
#
|
|
# timezone - the IANA Time Zone
|
|
#
|
|
# Returns nothing
|
|
def set_timezone(timezone)
|
|
ENV['TZ'] = timezone
|
|
end
|
|
|
|
# Public: Fetch the logger instance for this Jekyll process.
|
|
#
|
|
# Returns the LogAdapter instance.
|
|
def logger
|
|
@logger ||= LogAdapter.new(Stevenson.new, (ENV["JEKYLL_LOG_LEVEL"] || :info).to_sym)
|
|
end
|
|
|
|
# Public: Set the log writer.
|
|
# New log writer must respond to the same methods
|
|
# as Ruby's interal Logger.
|
|
#
|
|
# writer - the new Logger-compatible log transport
|
|
#
|
|
# Returns the new logger.
|
|
def logger=(writer)
|
|
@logger = LogAdapter.new(writer)
|
|
end
|
|
|
|
# Public: An array of sites
|
|
#
|
|
# Returns the Jekyll sites created.
|
|
def sites
|
|
@sites ||= []
|
|
end
|
|
|
|
# Public: Ensures the questionable path is prefixed with the base directory
|
|
# and prepends the questionable path with the base directory if false.
|
|
#
|
|
# base_directory - the directory with which to prefix the questionable path
|
|
# questionable_path - the path we're unsure about, and want prefixed
|
|
#
|
|
# Returns the sanitized path.
|
|
def sanitized_path(base_directory, questionable_path)
|
|
return base_directory if base_directory.eql?(questionable_path)
|
|
|
|
clean_path = File.expand_path(questionable_path, "/")
|
|
clean_path = clean_path.sub(/\A\w\:\//, '/')
|
|
|
|
unless clean_path.start_with?(base_directory.sub(/\A\w\:\//, '/'))
|
|
File.join(base_directory, clean_path)
|
|
else
|
|
clean_path
|
|
end
|
|
end
|
|
|
|
# Conditional optimizations
|
|
Jekyll::External.require_if_present('liquid-c')
|
|
|
|
end
|
|
end
|
|
|
|
require_all 'jekyll/commands'
|
|
require_all 'jekyll/converters'
|
|
require_all 'jekyll/converters/markdown'
|
|
require_all 'jekyll/generators'
|
|
require_all 'jekyll/tags'
|
|
|
|
# Eventually remove these for 3.0 as non-core
|
|
Jekyll::External.require_with_graceful_fail(%w[
|
|
toml
|
|
jekyll-paginate
|
|
jekyll-gist
|
|
jekyll-coffeescript
|
|
jekyll-sass-converter
|
|
])
|