add a class `FrontmatterDefaults` for handling of frontmatter defaults

This commit is contained in:
maul.esel 2013-09-11 00:55:28 +02:00
parent 3ccd8dad31
commit b3fdaa9792
4 changed files with 60 additions and 1 deletions

View File

@ -31,6 +31,7 @@ require 'jekyll/core_ext'
require 'jekyll/stevenson'
require 'jekyll/deprecator'
require 'jekyll/configuration'
require 'jekyll/frontmatter_defaults.rb'
require 'jekyll/site'
require 'jekyll/convertible'
require 'jekyll/url'

View File

@ -40,6 +40,8 @@ module Jekyll
'excerpt_separator' => "\n\n",
'defaults' => [],
'maruku' => {
'use_tex' => false,
'use_divs' => false,
@ -217,6 +219,5 @@ module Jekyll
config
end
end
end

View File

@ -0,0 +1,53 @@
module Jekyll
class Configuration
class FrontmatterDefaults
def initialize(site)
@site = site
end
def find(path, type, setting)
value = nil
matching_sets(path, type).each do |set|
value = set['values'][setting] if set['values'].has_key?(setting)
end
value
end
def all(path, type)
defaults = {}
matching_sets(path, type).each do |set|
defaults.merge! set['values']
end
defaults
end
private
def applies?(scope, path, type)
(scope['path'].empty? || path.starts_with?(scope['path'])) && (!scope.has_key?('type') || scope['type'] == type.to_s)
end
def valid?(set)
set['scope'].is_a?(Hash) && set['scope'].has_key?('path') && set['values'].is_a?(Hash)
end
def matching_sets(path, type)
valid_sets.select do |set|
applies?(set['scope'], path, type)
end
end
def valid_sets
sets = @site.config['defaults']
return [] unless sets.is_a?(Array)
sets.select do |set|
unless valid?(set)
Jekyll.logger.warn "Default:", "An invalid default set was found"
end
valid?(set)
end
end
end
end
end

View File

@ -369,6 +369,10 @@ module Jekyll
end
end
def frontmatter_defaults
@frontmatter_defaults ||= Configuration::FrontmatterDefaults.new(self)
end
private
def has_yaml_header?(file)