Add Configuration.from & use in Jekyll.configuration.

This process streamlines the creation of new configurations. Creating a new
site will choke if not all the correct options are given.
Configuration.from will ensure the overrides have all string keys and
ensures all the common issues & defaults are in place so a Site can be
created.

A common use:

    config = Configuration.from({ 'permalink' => '/:title/' }) # etc
    site = Jekyll::Site.new(config)
This commit is contained in:
Parker Moore 2016-04-08 10:00:03 -07:00 committed by Pat Hawks
parent fab092fcec
commit d01f7943de
2 changed files with 21 additions and 5 deletions

View File

@ -98,15 +98,14 @@ module Jekyll
# list of option names and their defaults. # list of option names and their defaults.
# #
# Returns the final configuration Hash. # Returns the final configuration Hash.
def configuration(override = {}) def configuration(override = Hash.new)
config = Configuration[Configuration::DEFAULTS] config = Configuration.new
override = Configuration[override].stringify_keys
unless override.delete('skip_config_files') unless override.delete('skip_config_files')
config = config.read_config_files(config.config_files(override)) config = config.read_config_files(config.config_files(override))
end end
# Merge DEFAULTS < _config.yml < override # Merge DEFAULTS < _config.yml < override
config = Utils.deep_merge_hashes(config, override).stringify_keys config = Configuration.from Utils.deep_merge_hashes(config, override).stringify_keys
set_timezone(config['timezone']) if config['timezone'] set_timezone(config['timezone']) if config['timezone']
config config

View File

@ -74,6 +74,23 @@ module Jekyll
} }
}].freeze }].freeze
class << self
# Static: Produce a Configuration ready for use in a Site.
# It takes the input, fills in the defaults where values do not
# exist, and patches common issues including migrating options for
# backwards compatiblity. Except where a key or value is being fixed,
# the user configuration will override the defaults.
#
# user_config - a Hash or Configuration of overrides.
#
# Returns a Configuration filled with defaults and fixed for common
# problems and backwards-compatibility.
def from(user_config)
Utils.deep_merge_hashes(DEFAULTS, Configuration[user_config].stringify_keys).
fix_common_issues.backwards_compatibilize.add_default_collections
end
end
# Public: Turn all keys into string # Public: Turn all keys into string
# #
# Return a copy of the hash where all its keys are strings # Return a copy of the hash where all its keys are strings
@ -237,7 +254,7 @@ module Jekyll
" as a list of comma-separated values." " as a list of comma-separated values."
config[option] = csv_to_array(config[option]) config[option] = csv_to_array(config[option])
end end
config[option].map!(&:to_s) config[option].map!(&:to_s) if config[option]
end end
if (config['kramdown'] || {}).key?('use_coderay') if (config['kramdown'] || {}).key?('use_coderay')