This module provides basic services for options handling in your Nit programs.
The Config
class can be used as a simple option holder and processor:
import config
# Create a new config option
var opt_my = new OptionString("My option", "--my")
# Create the config and add the option
var config = new Config
config.add_option(opt_my)
# Parse the program arguments, usually `args`
config.parse_options(["--my", "myOption", "arg1", "arg2"])
# Access the options and args
assert opt_my.value == "myOption"
assert config.args == ["arg1", "arg2"]
Instead of using basic Config
instances, it is better to define new sublcasses
to store options and define custom services.
import config
class MyConfig
super Config
var opt_my = new OptionString("My option", "--my")
init do
super
tool_description = "Usage: MyExample [OPTION]... [ARGS]..."
add_option(opt_my)
end
fun my: String do return opt_my.value or else "Default value"
end
var config = new MyConfig
config.parse_options(["--my", "myOption", "arg1", "arg2"])
assert config.my == "myOption"
assert config.args == ["arg1", "arg2"]
We define the my
method to provide an elegant shortcut to opt_my.value
and define the default value if the option was not set by the user.
The tool_description
attribute is used to set the usage
header printed when
the user request the help
message.
config.parse_options(["-h"])
if config.help then
config.usage
exit 0
end
This will display the tool usage like this:
Usage: MyExample [OPTION]... [ARGS]...
-h, --help Show this help message
--my My option
ini
fileThe IniConfig
class extends Config
to add an easy way to link your
configuration to an ini file.
class MyIniConfig
super IniConfig
var opt_my = new OptionString("My option", "--my")
init do
super
tool_description = "Usage: MyExample [OPTION]... [ARGS]..."
opts.add_option(opt_my)
end
fun my: String do return opt_my.value or else ini["my"] or else "Default"
end
This time, we define the my
method to return the option value or the ini
if no option was passed. Finally, if no ini value can be found, we return the
default value.
By default, IniConfig
looks at a config.ini
file in the execution directory.
This can be overrided in multiple ways.
First by the app user by setting the --config
option:
var config = new MyIniConfig
config.parse_options(["--config", "my_config.ini"])
assert config.config_file == "my_config.ini"
Default config file can also be changed by the library client through the
default_config_file
attribute:
config = new MyIniConfig
config.default_config_file = "my_config.ini"
config.parse_options(["arg"])
assert config.config_file == "my_config.ini"
Or by the library developper in the custom config class:
class MyCustomIniConfig
super IniConfig
redef var default_config_file = "my_config.ini"
end
var config = new MyCustomIniConfig
config.parse_options(["arg"])
assert config.config_file == "my_config.ini"