Support additional options as part of the Config

This commit adds the ability to add a closure suitable for adding
additional options. It is expected to allow someone to set global,
module or class level variables so they can pass changes/options
suitable for making decisions.
This commit is contained in:
Ben Jolitz 2016-03-22 14:13:49 -07:00
parent 839d120a50
commit 1f809c68c8
3 changed files with 21 additions and 1 deletions

View file

@ -28,4 +28,19 @@ describe "Config" do
config.add_handler CustomTestHandler.new config.add_handler CustomTestHandler.new
config.handlers.size.should eq(5) config.handlers.size.should eq(5)
end 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 end

View file

@ -35,6 +35,10 @@ module Kemal
puts opts puts opts
exit 0 exit 0
end end
unless @config.on_options.nil?
c = @config.on_options.not_nil!
c.call opts
end
end end
end end

View file

@ -3,7 +3,7 @@ module Kemal
INSTANCE = Config.new INSTANCE = Config.new
HANDLERS = [] of HTTP::Handler HANDLERS = [] of HTTP::Handler
property host_binding, ssl, port, env, public_folder, logging, 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 def initialize
@host_binding = "0.0.0.0" @host_binding = "0.0.0.0"
@ -16,6 +16,7 @@ module Kemal
@always_rescue = true @always_rescue = true
@error_handler = nil @error_handler = nil
@run = false @run = false
@on_options = nil
end end
def logger def logger