diff --git a/spec/config_spec.cr b/spec/config_spec.cr index cc0cbb4..2fa60a8 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.extra_options do |parser| + parser.on("--test TEST_OPTION", "Test an option") do |opt| + test_option = opt + end + end + Kemal::CLI.new + test_option.should eq("FOOBAR") + end end diff --git a/src/kemal/cli.cr b/src/kemal/cli.cr index c64bc2f..402b78d 100644 --- a/src/kemal/cli.cr +++ b/src/kemal/cli.cr @@ -34,6 +34,7 @@ module Kemal puts opts exit 0 end + @config.extra_options.try &.call(opts) end end diff --git a/src/kemal/config.cr b/src/kemal/config.cr index 3021cc3..5792256 100644 --- a/src/kemal/config.cr +++ b/src/kemal/config.cr @@ -7,7 +7,7 @@ module Kemal @server : HTTP::Server? property host_binding, ssl, port, env, public_folder, logging, - always_rescue, serve_static, server + always_rescue, serve_static, server, extra_options def initialize @host_binding = "0.0.0.0" @@ -68,6 +68,9 @@ module Kemal HANDLERS.insert(0, @logger.not_nil!) end + def extra_options(&@extra_options : OptionParser ->) + end + private def setup_error_handler if @always_rescue @error_handler ||= Kemal::CommonExceptionHandler.new