diff options
Diffstat (limited to 'src/cli.cr')
-rw-r--r-- | src/cli.cr | 123 |
1 files changed, 64 insertions, 59 deletions
diff --git a/src/cli.cr b/src/cli.cr index 6f5412c..8cc79be 100644 --- a/src/cli.cr +++ b/src/cli.cr @@ -40,8 +40,7 @@ struct Configuration @icann_remote : String getter icann_remote - def initialize(path) - ini = INI.parse File.read path + def initialize(ini) @db = Path[ini["general"]["db"]] @api = ini["general"]["api"] @opennic_local = Path[ini["opennic"]["local"]] @@ -51,68 +50,74 @@ struct Configuration end end -subcmd = Subcommand::Usage -usage = "" -config_path, port = nil, 8910 +def die(error) + STDERR << error + exit 1 +end + +{% unless @top_level.constant("SPEC") %} + subcmd = Subcommand::Usage + usage = "" + config_path, port = nil, 0 -parser = OptionParser.new do |parser| - banner_prefix = "Usage: #{Path[PROGRAM_NAME].basename}" - parser.banner = "#{banner_prefix} [subcommand] [arguments]" - parser.on "serve", "start the HTTP server" do - subcmd = Subcommand::Serve - parser.banner = "#{banner_prefix} serve --config=PATH [--port=N]" - usage = parser.to_s - parser.on "-c PATH", "--config=PATH", - "path to configuration file (required)" do |path| - config_path = path + parser = OptionParser.new do |parser| + banner_prefix = "Usage: #{Path[PROGRAM_NAME].basename}" + parser.banner = "#{banner_prefix} [subcommand] [arguments]" + parser.on "serve", "start the HTTP server" do + subcmd = Subcommand::Serve + parser.banner = "#{banner_prefix} serve --config=PATH [--port=N]" + usage = parser.to_s + parser.on "-c PATH", "--config=PATH", + "path to configuration file (required)" do |path| + config_path = path + end + parser.on "-p N", "--port=N", "listening port" do |n| + port = n.to_i + end end - parser.on "-p N", "--port=N", "listening port (default to 8910)" do |n| - port = n.to_i + parser.on "-h", "--help", "show this help message and exit" do + puts parser + exit end - end - parser.on "-h", "--help", "show this help message and exit" do - puts parser - exit - end - parser.invalid_option do |flag| - STDERR.puts "Error: Invalid option: #{flag}" - subcmd = Subcommand::Usage - end - parser.missing_option do |flag| - STDERR.puts "Error: Missing argument for #{flag}" - subcmd = Subcommand::Usage - end - parser.unknown_args do |before_dash, after_dash| - next if before_dash.empty? && after_dash.empty? - STDERR << "Error: Unknown arguments:" - STDERR << " " << before_dash.join " " if !before_dash.empty? - STDERR << " -- " << after_dash.join " " if !after_dash.empty? - STDERR.puts - subcmd = Subcommand::Usage + parser.invalid_option do |flag| + STDERR.puts "Error: Invalid option: #{flag}" + subcmd = Subcommand::Usage + end + parser.missing_option do |flag| + STDERR.puts "Error: Missing argument for #{flag}" + subcmd = Subcommand::Usage + end + parser.unknown_args do |before_dash, after_dash| + next if before_dash.empty? && after_dash.empty? + STDERR << "Error: Unknown arguments:" + STDERR << " " << before_dash.join " " if !before_dash.empty? + STDERR << " -- " << after_dash.join " " if !after_dash.empty? + STDERR.puts + subcmd = Subcommand::Usage + end end -end -parser.parse -cfg = case subcmd - when .serve? - unless config_path - STDERR << usage - exit 1 + parser.parse + cfg = case subcmd + when .serve? + unless config_path + die usage + end + begin + Configuration.new INI.parse File.read config_path.not_nil! + rescue ex + die "Error: Failed to read config from #{config_path}: #{ex}\n" + end end - begin - Configuration.new config_path.not_nil! - rescue ex - STDERR.puts "Error: Failed to read config from #{config_path}: #{ex}" - exit 1 - end - end -case subcmd -in .serve? - server = Server.new cfg.not_nil! - server.listen port -in .usage? - STDERR.puts parser - exit 1 -end + case subcmd + in .serve? + server = Server.new cfg.not_nil! + server.listen port do |address| + puts "Listening on http://#{address}" + end + in .usage? + die parser + end +{% end %} |