diff --git a/lib/jekyll.rb b/lib/jekyll.rb index a48d3460..fa2e87dd 100644 --- a/lib/jekyll.rb +++ b/lib/jekyll.rb @@ -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' diff --git a/lib/jekyll/configuration.rb b/lib/jekyll/configuration.rb index 05a097c7..453c5427 100644 --- a/lib/jekyll/configuration.rb +++ b/lib/jekyll/configuration.rb @@ -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 diff --git a/lib/jekyll/frontmatter_defaults.rb b/lib/jekyll/frontmatter_defaults.rb new file mode 100644 index 00000000..ace09985 --- /dev/null +++ b/lib/jekyll/frontmatter_defaults.rb @@ -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 \ No newline at end of file diff --git a/lib/jekyll/site.rb b/lib/jekyll/site.rb index f4a5bd0d..ae2d2b56 100644 --- a/lib/jekyll/site.rb +++ b/lib/jekyll/site.rb @@ -369,6 +369,10 @@ module Jekyll end end + def frontmatter_defaults + @frontmatter_defaults ||= Configuration::FrontmatterDefaults.new(self) + end + private def has_yaml_header?(file)