class GitHubPages::Configuration

Sets and manages Jekyll configuration defaults and overrides

def debug_print_versions

stream for debugging purposes. See by running Jekyll with '--verbose'
Print the versions for github-pages and jekyll to the debug
def debug_print_versions
  Jekyll.logger.debug "GitHub Pages:", "github-pages v#{GitHubPages::VERSION}"
  Jekyll.logger.debug "GitHub Pages:", "jekyll v#{Jekyll::VERSION}"
end

def development?

def development?
  Jekyll.env == "development"
end

def disable_whitelist?

def disable_whitelist?
  development? && !ENV["DISABLE_WHITELIST"].to_s.empty?
end

def effective_config(user_config)

Note: this is a highly modified version of Jekyll#configuration

Returns the effective Configuration

values which themselves override our defaults.
configuration sandwhich with our overrides overriding the user's specified
Given a user's config, determines the effective configuration by building a user
def effective_config(user_config)
  # Merge user config into defaults
  config = Jekyll::Utils.deep_merge_hashes(MERGED_DEFAULTS, user_config)
    .fix_common_issues
    .add_default_collections
  # Merge overwrites into user config
  config = Jekyll::Utils.deep_merge_hashes config, OVERRIDES
  # Ensure we have those gems we want.
  config["gems"] = Array(config["gems"]) | DEFAULT_PLUGINS
  config["whitelist"] = config["whitelist"] | config["gems"] if disable_whitelist?
  config["whitelist"] = config["whitelist"] | DEVELOPMENT_PLUGINS if development?
  config
end

def processed(site)

def processed(site)
  site.instance_variable_set :@_github_pages_processed, true
end

def processed?(site)

def processed?(site)
  site.instance_variable_get(:@_github_pages_processed) == true
end

def set(site)

guards against double-processing via the value in #processed.
Equivalent #set! function contains the code of interest. This function
Set the site's configuration. Implemented as an `after_reset` hook.
def set(site)
  return if processed? site
  debug_print_versions
  set!(site)
  processed(site)
end

def set!(site)

Should be called by #set to protect against multiple processings.
Set the site's configuration with all the proper defaults and overrides.
def set!(site)
  config = effective_config(site.config)
  # Assign everything to the site
  site.instance_variable_set :@config, config
  # Ensure all
  CONFIGS_WITH_METHODS.each do |opt|
    site.public_send("#{opt}=", site.config[opt])
  end
end