docmachine-cli/src/cli.cr

75 lines
1.9 KiB
Crystal
Raw Normal View History

require "option_parser"
require "digest/sha256"
require "colorize"
2023-04-27 07:42:15 +00:00
require "./log"
2023-03-25 19:40:52 +00:00
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
2023-04-27 07:42:15 +00:00
Log = DocMachine::Log.for("cli")
def initialize
end
2023-03-26 09:41:40 +00:00
def start(args)
2023-03-25 19:40:52 +00:00
config = Config.new
2023-03-26 09:41:40 +00:00
commands = [] of Proc(Nil)
parser = OptionParser.new do |opts|
2023-03-24 15:53:27 +00:00
opts.banner = [
"Usage: #{PROGRAM_NAME} [options]",
"",
"Main options:"
].join("\n")
2023-04-27 07:42:15 +00:00
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
2023-04-27 07:42:15 +00:00
Log.notice { opts }
exit
end
2023-03-24 15:53:27 +00:00
opts.separator ""
opts.separator "Commands:"
2023-03-25 19:40:52 +00:00
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
2023-03-26 09:41:40 +00:00
parser.parse(args)
2023-04-27 07:42:15 +00:00
::Log.setup(config.verbosity, ::Log::IOBackend.new(formatter: BaseFormat))
Log.notice { "verbosity level = #{config.verbosity}" }
2023-04-25 10:28:16 +00:00
Log.debug { "commands = #{commands}" }
2023-04-24 16:43:04 +00:00
if commands.size < 1
2023-04-25 10:28:16 +00:00
Log.error { parser.to_s }
2023-04-27 07:42:15 +00:00
Log.error { "No command defined" }
2023-04-24 16:43:04 +00:00
end
commands.each do |command|
2023-04-27 07:42:15 +00:00
Log.debug { "== Running #{command}" }
2023-04-24 16:43:04 +00:00
command.call()
2023-03-26 09:41:40 +00:00
end
end
end
end