require "option_parser" require "digest/sha256" require "colorize" require "./log" require "./config" require "./build/cli" require "./build/run" require "./scaffold/cli" require "./scaffold/run" require "./plan/cli" require "./plan/run" require "./write/cli" require "./write/run" module DocMachine class Cli Log = DocMachine::Log.for("cli") def initialize end def start(args) config = Config.new commands = [] of Proc(Nil) parser = OptionParser.new do |opts| opts.banner = [ "Usage: #{PROGRAM_NAME} [options]", "", "Main options:" ].join("\n") opts.on("-v", "--verbosity LEVEL", "Change verbosity level to LEVEL (0..3)") do |verbose| verbose_i = verbose.to_i verbose_i = 0 if verbose.to_i < 0 verbose_i = 3 if verbose.to_i > 3 config.verbosity = ::Log::Severity.from_value(3 - verbose_i) rescue ex: ArgumentError Log.error { "Wrong value for parameter --verbosity" } exit 1 end opts.on("-h", "--help", "Show this help") do Log.notice { opts } exit end opts.separator "" opts.separator "Commands:" DocMachine::Scaffold::Cli.add_options(opts, args, config, commands) DocMachine::Plan::Cli.add_options(opts, args, config, commands) DocMachine::Write::Cli.add_options(opts, args, config, commands) DocMachine::Build::Cli.add_options(opts, args, config, commands) end parser.parse(args) ::Log.setup(config.verbosity, ::Log::IOBackend.new(formatter: BaseFormat)) Log.notice { "verbosity level = #{config.verbosity}" } Log.debug { "commands = #{commands}" } if commands.size < 1 Log.error { parser.to_s } Log.error { "No command defined" } end commands.each do |command| Log.debug { "== Running #{command}" } command.call() end end end end