From 06fa14c11ace8970b7fb7aad4159ffc1382d20d1 Mon Sep 17 00:00:00 2001 From: Parker Moore Date: Fri, 15 Jan 2016 16:11:08 -0800 Subject: [PATCH] Restructure data validation so that permalink check raises an error. --- lib/jekyll/convertible.rb | 24 +++++++++++++----------- lib/jekyll/errors.rb | 6 ++++-- test/test_convertible.rb | 4 +--- 3 files changed, 18 insertions(+), 16 deletions(-) diff --git a/lib/jekyll/convertible.rb b/lib/jekyll/convertible.rb index 7f3702d3..a8e1d0a4 100644 --- a/lib/jekyll/convertible.rb +++ b/lib/jekyll/convertible.rb @@ -42,6 +42,8 @@ module Jekyll # # Returns nothing. def read_yaml(base, name, opts = {}) + filename = File.join(base, name) + begin self.content = File.read(site.in_source_dir(base, name), merged_file_read_opts(opts)) @@ -50,28 +52,28 @@ module Jekyll self.data = SafeYAML.load(Regexp.last_match(1)) end rescue SyntaxError => e - Jekyll.logger.warn "YAML Exception reading #{File.join(base, name)}: #{e.message}" + Jekyll.logger.warn "YAML Exception reading #{filename}: #{e.message}" rescue Exception => e - Jekyll.logger.warn "Error reading file #{File.join(base, name)}: #{e.message}" + Jekyll.logger.warn "Error reading file #{filename}: #{e.message}" end self.data ||= {} - - validate_data! - validate_permalink! + + validate_data! filename + validate_permalink! filename self.data end - - def validate_data! + + def validate_data!(filename) unless self.data.is_a?(Hash) - Jekyll.logger.abort_with "Fatal:", "Invalid YAML front matter in #{File.join(base, name)}" + raise Errors::InvalidYAMLFrontMatterError, "Invalid YAML front matter in #{filename}" end end - - def validate_permalink! + + def validate_permalink!(filename) if self.data['permalink'] && self.data['permalink'].size == 0 - Jekyll.logger.abort_with "Fatal:", "Invalid permalink in #{File.join(base, name)}" + raise Errors::InvalidPermalinkError, "Invalid permalink in #{filename}" end end diff --git a/lib/jekyll/errors.rb b/lib/jekyll/errors.rb index 2b0dbc0c..36b2643d 100644 --- a/lib/jekyll/errors.rb +++ b/lib/jekyll/errors.rb @@ -2,7 +2,9 @@ module Jekyll module Errors FatalException = Class.new(::RuntimeError) - MissingDependencyException = Class.new(FatalException) - DropMutationException = Class.new(FatalException) + DropMutationException = Class.new(FatalException) + InvalidPermalinkError = Class.new(FatalException) + InvalidYAMLFrontMatterError = Class.new(FatalException) + MissingDependencyException = Class.new(FatalException) end end diff --git a/test/test_convertible.rb b/test/test_convertible.rb index 0c5acf1a..524ecdf4 100644 --- a/test/test_convertible.rb +++ b/test/test_convertible.rb @@ -52,11 +52,9 @@ class TestConvertible < JekyllUnitTest should "parse the front-matter but show an error if permalink is empty" do name = 'empty_permalink.erb' - out = capture_stderr do + assert_raises(Errors::InvalidPermalinkError) do @convertible.read_yaml(@base, name) end - assert_match(/Invalid permalink/, out) - assert_match(/#{File.join(@base, name)}/, out) end should "parse the front-matter correctly whitout permalink" do