Merge pull request #1390 from mojombo/better-errors

Catch and fix (somehow) common configuration errors
This commit is contained in:
Parker Moore 2013-08-07 15:28:16 -07:00
commit cb52535c03
3 changed files with 40 additions and 10 deletions

View File

@ -150,7 +150,7 @@ module Jekyll
$stderr.puts "#{err}"
end
configuration.backwards_compatibilize
configuration.fix_common_issues.backwards_compatibilize
end
# Public: Split a CSV string into an array containing its values
@ -205,5 +205,17 @@ module Jekyll
config
end
def fix_common_issues
config = clone
if config.has_key?('paginate') && (!config['paginate'].is_a?(Integer) || config['paginate'] < 1)
Jekyll.logger.warn "Config Warning:", "The `paginate` key must be a" +
" positive integer or nil. It's currently set to '#{config['paginate'].inspect}'."
config['paginate'] = nil
end
config
end
end
end

View File

@ -2,18 +2,18 @@ module Jekyll
class Deprecator
def self.process(args)
no_subcommand(args)
deprecation_message args, "--server", "The --server command has been replaced by the \
arg_is_present? args, "--server", "The --server command has been replaced by the \
'serve' subcommand."
deprecation_message args, "--no-server", "To build Jekyll without launching a server, \
arg_is_present? args, "--no-server", "To build Jekyll without launching a server, \
use the 'build' subcommand."
deprecation_message args, "--auto", "The switch '--auto' has been replaced with '--watch'."
deprecation_message args, "--no-auto", "To disable auto-replication, simply leave off \
arg_is_present? args, "--auto", "The switch '--auto' has been replaced with '--watch'."
arg_is_present? args, "--no-auto", "To disable auto-replication, simply leave off \
the '--watch' switch."
deprecation_message args, "--pygments", "The 'pygments' setting can only be set in \
arg_is_present? args, "--pygments", "The 'pygments' setting can only be set in \
your config files."
deprecation_message args, "--paginate", "The 'paginate' setting can only be set in your \
arg_is_present? args, "--paginate", "The 'paginate' setting can only be set in your \
config files."
deprecation_message args, "--url", "The 'url' setting can only be set in your config files."
arg_is_present? args, "--url", "The 'url' setting can only be set in your config files."
end
def self.no_subcommand(args)
@ -23,10 +23,14 @@ module Jekyll
end
end
def self.deprecation_message(args, deprecated_argument, message)
def self.arg_is_present?(args, deprecated_argument, message)
if args.include?(deprecated_argument)
deprecation_message(message)
end
end
def self.deprecation_message(message)
Jekyll.logger.error "Deprecation:", message
end
end
end
end

View File

@ -79,6 +79,20 @@ class TestConfiguration < Test::Unit::TestCase
assert_equal @config.backwards_compatibilize["include"], %w[STOP_THE_PRESSES.txt .heloses .git]
end
end
context "#fix_common_issues" do
setup do
@config = Proc.new do |val|
Configuration[{
'paginate' => val
}]
end
end
should "sets an invalid 'paginate' value to nil" do
assert_nil @config.call(0).fix_common_issues['paginate']
assert_nil @config.call(-1).fix_common_issues['paginate']
assert_nil @config.call(true).fix_common_issues['paginate']
end
end
context "loading configuration" do
setup do
@path = File.join(Dir.pwd, '_config.yml')