module Jekyll
  module Deprecator
    extend self

    def process(args)
      no_subcommand(args)
      arg_is_present? args, "--server", "The --server command has been replaced by the \
                          'serve' subcommand."
      arg_is_present? args, "--no-server", "To build Jekyll without launching a server, \
                          use the 'build' subcommand."
      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."
      arg_is_present? args, "--pygments", "The 'pygments'settings has been removed in \
                          favour of 'highlighter'."
      arg_is_present? args, "--paginate", "The 'paginate' 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 no_subcommand(args)
      if args.size > 0 && args.first =~ /^--/ && !%w[--help --version].include?(args.first)
        deprecation_message "Jekyll now uses subcommands instead of just \
                            switches. Run `jekyll --help' to find out more."
      end
    end

    def arg_is_present?(args, deprecated_argument, message)
      if args.include?(deprecated_argument)
        deprecation_message(message)
      end
    end

    def deprecation_message(message)
      Jekyll.logger.error "Deprecation:", message
    end

    def defaults_deprecate_type(old, current)
      Jekyll.logger.warn "Defaults:", "The '#{old}' type has become '#{current}'."
      Jekyll.logger.warn "Defaults:", "Please update your front-matter defaults to use 'type: #{current}'."
    end

  end
end
