Add support for parsing command line parameters from other sources than ARGV (#483)

This commit is contained in:
Diego Guraieb 2018-11-30 13:16:08 -03:00 committed by Serdar Dogruyol
parent 50f48509fd
commit a5d8df7382
3 changed files with 18 additions and 13 deletions

View file

@ -51,7 +51,7 @@ describe "Config" do
test_option = opt test_option = opt
end end
end end
Kemal::CLI.new Kemal::CLI.new ARGV
test_option.should eq("FOOBAR") test_option.should eq("FOOBAR")
end end

View file

@ -7,25 +7,28 @@ require "./kemal/helpers/*"
module Kemal module Kemal
# Overload of `self.run` with the default startup logging. # Overload of `self.run` with the default startup logging.
def self.run(port : Int32?) def self.run(port : Int32?, args = ARGV)
self.run(port) { } self.run(port, args) { }
end end
# Overload of `self.run` without port. # Overload of `self.run` without port.
def self.run def self.run(args = ARGV)
self.run(nil) self.run(nil, args: args)
end end
# Overload of `self.run` to allow just a block. # Overload of `self.run` to allow just a block.
def self.run(&block) def self.run(args = ARGV, &block)
self.run nil, &block self.run(nil, args: args, &block)
end end
# The command to run a `Kemal` application. # The command to run a `Kemal` application.
# #
# If *port* is not given Kemal will use `Kemal::Config#port` # If *port* is not given Kemal will use `Kemal::Config#port`
def self.run(port : Int32? = nil, &block) #
Kemal::CLI.new # To use custom command line arguments, set args to nil
#
def self.run(port : Int32? = nil, args = ARGV, &block)
Kemal::CLI.new args
config = Kemal.config config = Kemal.config
config.setup config.setup
config.port = port if port config.port = port if port

View file

@ -3,18 +3,20 @@ require "option_parser"
module Kemal module Kemal
# Handles all the initialization from the command line. # Handles all the initialization from the command line.
class CLI class CLI
def initialize def initialize(args)
@ssl_enabled = false @ssl_enabled = false
@key_file = "" @key_file = ""
@cert_file = "" @cert_file = ""
@config = Kemal.config @config = Kemal.config
read_env read_env
parse if args
parse args
end
configure_ssl configure_ssl
end end
private def parse private def parse(args : Array(String))
OptionParser.parse! do |opts| OptionParser.parse args do |opts|
opts.on("-b HOST", "--bind HOST", "Host to bind (defaults to 0.0.0.0)") do |host_binding| opts.on("-b HOST", "--bind HOST", "Host to bind (defaults to 0.0.0.0)") do |host_binding|
@config.host_binding = host_binding @config.host_binding = host_binding
end end