diff --git a/spec/config_spec.cr b/spec/config_spec.cr index cc0cbb4..4cd6b3e 100644 --- a/spec/config_spec.cr +++ b/spec/config_spec.cr @@ -28,4 +28,19 @@ describe "Config" do config.add_handler CustomTestHandler.new config.handlers.size.should eq(5) end + + it "adds custom options" do + config = Kemal.config + ARGV.push("--test") + ARGV.push("FOOBAR") + $test_option = nil + + config.on_options = ->(parser : OptionParser) { + parser.on("--test TEST_OPTION", "Test an option") do |opt| + $test_option = opt + end + } + Kemal::CLI.new + $test_option.should eq("FOOBAR") + end end diff --git a/src/kemal/cli.cr b/src/kemal/cli.cr index d074f09..9e24acd 100644 --- a/src/kemal/cli.cr +++ b/src/kemal/cli.cr @@ -35,6 +35,10 @@ module Kemal puts opts exit 0 end + unless @config.on_options.nil? + c = @config.on_options.not_nil! + c.call opts + end end end diff --git a/src/kemal/config.cr b/src/kemal/config.cr index f9b6b6b..6b926b8 100644 --- a/src/kemal/config.cr +++ b/src/kemal/config.cr @@ -3,7 +3,7 @@ module Kemal INSTANCE = Config.new HANDLERS = [] of HTTP::Handler property host_binding, ssl, port, env, public_folder, logging, - always_rescue, error_handler, serve_static, run + always_rescue, error_handler, serve_static, run, on_options def initialize @host_binding = "0.0.0.0" @@ -16,6 +16,7 @@ module Kemal @always_rescue = true @error_handler = nil @run = false + @on_options = nil end def logger