summary refs log tree commit diff homepage
path: root/src/cli.cr
diff options
context:
space:
mode:
Diffstat (limited to 'src/cli.cr')
-rw-r--r--src/cli.cr123
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 %}