diff --git a/jekyll.gemspec b/jekyll.gemspec index ee48478c..c3dafc33 100644 --- a/jekyll.gemspec +++ b/jekyll.gemspec @@ -32,6 +32,7 @@ Gem::Specification.new do |s| s.add_runtime_dependency('safe_yaml', "~> 0.9.7") s.add_runtime_dependency('colorator', "~> 0.1") s.add_runtime_dependency('redcarpet', "~> 2.3.0") + s.add_runtime_dependency('toml', '~> 0.0.4') s.add_development_dependency('rake', "~> 10.1") s.add_development_dependency('rdoc', "~> 3.11") diff --git a/lib/jekyll/configuration.rb b/lib/jekyll/configuration.rb index 442fa5e6..ae75034b 100644 --- a/lib/jekyll/configuration.rb +++ b/lib/jekyll/configuration.rb @@ -99,6 +99,17 @@ module Jekyll override['source'] || self['source'] || DEFAULTS['source'] end + def safe_load_file(filename) + case File.extname(filename) + when '.toml' + TOML.load_file(filename) + when /\.y(a)?ml/ + YAML.safe_load_file(filename) + else + raise ArgumentError, "No parser for '#{filename}' is available."kk + end + end + # Public: Generate list of configuration files from the override # # override - the command-line options hash @@ -121,8 +132,8 @@ module Jekyll # # Returns this configuration, overridden by the values in the file def read_config_file(file) - next_config = YAML.safe_load_file(file) - raise ArgumentError.new("Configuration file: (INVALID) #{file}".yellow) if !next_config.is_a?(Hash) + next_config = safe_load_file(file) + raise ArgumentError.new("Configuration file: (INVALID) #{file}".yellow) unless next_config.is_a?(Hash) Jekyll.logger.info "Configuration file:", file next_config rescue SystemCallError