Basic configuration class

import config

class MyConfig
    super Config

    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 "Default value"
end

var config = new MyConfig
config.parse_options(["--my", "hello", "arg1", "arg2"])
assert config.my == "hello"
assert config.args == ["arg1", "arg2"]

Introduced properties

fun add_option(opt: Option...)

config :: Config :: add_option

Add an option to self
fun args: Array[String]

config :: Config :: args

Return the remaining args once options are parsed by from_args
fun help: Bool

config :: Config :: help

Was the --help option requested?
fun opt_black_exts: OptionArray

config :: Config :: opt_black_exts

--blacklist-exts
fun opt_black_exts: OptionArray

config :: Config :: opt_black_exts

--blacklist-exts
protected fun opt_black_exts=(opt_black_exts: OptionArray)

config :: Config :: opt_black_exts=

--blacklist-exts
protected fun opt_black_exts=(opt_black_exts: OptionArray)

config :: Config :: opt_black_exts=

--blacklist-exts
fun opt_help: OptionBool

config :: Config :: opt_help

Help option
protected fun opt_help=(opt_help: OptionBool)

config :: Config :: opt_help=

Help option
protected fun opt_java_cp=(opt_java_cp: OptionString)

config :: Config :: opt_java_cp=

protected fun opt_lang=(opt_lang: OptionString)

config :: Config :: opt_lang=

--lang
protected fun opt_port=(opt_port: OptionInt)

config :: Config :: opt_port=

protected fun opt_server=(opt_server: OptionString)

config :: Config :: opt_server=

--server
fun opt_stub_man: OptionBool

config :: Config :: opt_stub_man

Option --stub-man
protected fun opt_stub_man=(opt_stub_man: OptionBool)

config :: Config :: opt_stub_man=

Option --stub-man
fun opt_white_exts: OptionArray

config :: Config :: opt_white_exts

--whitelist-exts
fun opt_white_exts: OptionArray

config :: Config :: opt_white_exts

--whitelist-exts
protected fun opt_white_exts=(opt_white_exts: OptionArray)

config :: Config :: opt_white_exts=

--whitelist-exts
protected fun opt_white_exts=(opt_white_exts: OptionArray)

config :: Config :: opt_white_exts=

--whitelist-exts
fun opts: OptionContext

config :: Config :: opts

Context used to store and parse options
protected fun opts=(opts: OptionContext)

config :: Config :: opts=

Context used to store and parse options
fun parse_options(args: Collection[String])

config :: Config :: parse_options

Initialize self options from args
fun stub_man_options

config :: Config :: stub_man_options

Generate a manpage stub from self
fun tool_description: String

config :: Config :: tool_description

Name, usage and synopsis of the tool.
fun tool_description=(tool_description: String)

config :: Config :: tool_description=

Name, usage and synopsis of the tool.
fun usage

config :: Config :: usage

Display tool_description and options usage in console

Redefined properties

redef type SELF: Config

config $ Config :: SELF

Type of this instance, automatically specialized in every class
redef init init

config $ Config :: init

Redefine this init to add your options
redef init init

vsm :: example_vsm $ Config :: init

redef init init

nlp :: nlp_index $ Config :: init

redef init init

nlp :: nlp_server $ Config :: init

All properties

fun !=(other: nullable Object): Bool

core :: Object :: !=

Have self and other different values?
fun ==(other: nullable Object): Bool

core :: Object :: ==

Have self and other the same value?
type CLASS: Class[SELF]

core :: Object :: CLASS

The type of the class of self.
type SELF: Object

core :: Object :: SELF

Type of this instance, automatically specialized in every class
fun add_option(opt: Option...)

config :: Config :: add_option

Add an option to self
fun args: Array[String]

config :: Config :: args

Return the remaining args once options are parsed by from_args
protected fun class_factory(name: String): CLASS

core :: Object :: class_factory

Implementation used by get_class to create the specific class.
fun class_name: String

core :: Object :: class_name

The class name of the object.
fun get_class: CLASS

core :: Object :: get_class

The meta-object representing the dynamic type of self.
fun hash: Int

core :: Object :: hash

The hash code of the object.
fun help: Bool

config :: Config :: help

Was the --help option requested?
init init

core :: Object :: init

fun inspect: String

core :: Object :: inspect

Developer readable representation of self.
protected fun inspect_head: String

core :: Object :: inspect_head

Return "CLASSNAME:#OBJECTID".
intern fun is_same_instance(other: nullable Object): Bool

core :: Object :: is_same_instance

Return true if self and other are the same instance (i.e. same identity).
fun is_same_serialized(other: nullable Object): Bool

core :: Object :: is_same_serialized

Is self the same as other in a serialization context?
intern fun is_same_type(other: Object): Bool

core :: Object :: is_same_type

Return true if self and other have the same dynamic type.
intern fun object_id: Int

core :: Object :: object_id

An internal hash code for the object based on its identity.
fun opt_black_exts: OptionArray

config :: Config :: opt_black_exts

--blacklist-exts
fun opt_black_exts: OptionArray

config :: Config :: opt_black_exts

--blacklist-exts
protected fun opt_black_exts=(opt_black_exts: OptionArray)

config :: Config :: opt_black_exts=

--blacklist-exts
protected fun opt_black_exts=(opt_black_exts: OptionArray)

config :: Config :: opt_black_exts=

--blacklist-exts
fun opt_help: OptionBool

config :: Config :: opt_help

Help option
protected fun opt_help=(opt_help: OptionBool)

config :: Config :: opt_help=

Help option
protected fun opt_java_cp=(opt_java_cp: OptionString)

config :: Config :: opt_java_cp=

protected fun opt_lang=(opt_lang: OptionString)

config :: Config :: opt_lang=

--lang
protected fun opt_port=(opt_port: OptionInt)

config :: Config :: opt_port=

protected fun opt_server=(opt_server: OptionString)

config :: Config :: opt_server=

--server
fun opt_stub_man: OptionBool

config :: Config :: opt_stub_man

Option --stub-man
protected fun opt_stub_man=(opt_stub_man: OptionBool)

config :: Config :: opt_stub_man=

Option --stub-man
fun opt_white_exts: OptionArray

config :: Config :: opt_white_exts

--whitelist-exts
fun opt_white_exts: OptionArray

config :: Config :: opt_white_exts

--whitelist-exts
protected fun opt_white_exts=(opt_white_exts: OptionArray)

config :: Config :: opt_white_exts=

--whitelist-exts
protected fun opt_white_exts=(opt_white_exts: OptionArray)

config :: Config :: opt_white_exts=

--whitelist-exts
fun opts: OptionContext

config :: Config :: opts

Context used to store and parse options
protected fun opts=(opts: OptionContext)

config :: Config :: opts=

Context used to store and parse options
fun output

core :: Object :: output

Display self on stdout (debug only).
intern fun output_class_name

core :: Object :: output_class_name

Display class name on stdout (debug only).
fun parse_options(args: Collection[String])

config :: Config :: parse_options

Initialize self options from args
fun serialization_hash: Int

core :: Object :: serialization_hash

Hash value use for serialization
fun stub_man_options

config :: Config :: stub_man_options

Generate a manpage stub from self
intern fun sys: Sys

core :: Object :: sys

Return the global sys object, the only instance of the Sys class.
abstract fun to_jvalue(env: JniEnv): JValue

core :: Object :: to_jvalue

fun to_s: String

core :: Object :: to_s

User readable representation of self.
fun tool_description: String

config :: Config :: tool_description

Name, usage and synopsis of the tool.
fun tool_description=(tool_description: String)

config :: Config :: tool_description=

Name, usage and synopsis of the tool.
fun usage

config :: Config :: usage

Display tool_description and options usage in console
package_diagram config::Config Config core::Object Object config::Config->core::Object config::IniConfig IniConfig config::IniConfig->config::Config github::LoaderConfig LoaderConfig github::LoaderConfig->config::IniConfig popcorn::AppConfig AppConfig popcorn::AppConfig->config::IniConfig github::LoaderConfig... ... github::LoaderConfig...->github::LoaderConfig popcorn::AppConfig... ... popcorn::AppConfig...->popcorn::AppConfig

Parents

interface Object

core :: Object

The root of the class hierarchy.

Children

class IniConfig

config :: IniConfig

Configuration class based on a INI file.

Descendants

class AppConfig

popcorn :: AppConfig

Configuration file for Popcorn apps
class LoaderConfig

github :: LoaderConfig

Loader configuration file

Class definitions

config $ Config
# Basic configuration class
#
# ~~~
# import config
#
# class MyConfig
#	super Config
#
#	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 "Default value"
# end
#
# var config = new MyConfig
# config.parse_options(["--my", "hello", "arg1", "arg2"])
# assert config.my == "hello"
# assert config.args == ["arg1", "arg2"]
# ~~~
class Config

	# Context used to store and parse options
	var opts = new OptionContext

	# Help option
	var opt_help = new OptionBool("Show this help message", "-h", "-?", "--help")

	# Option --stub-man
	var opt_stub_man = new OptionBool("Generate a stub manpage in markdown format", "--stub-man")

	# Redefine this init to add your options
	init do
		add_option(opt_help, opt_stub_man)
		opt_stub_man.hidden = true
	end

	# Add an option to `self`
	#
	# Shortcut to `opts.add_option`.
	fun add_option(opt: Option...) do opts.add_option(opt...)

	# Initialize `self` options from `args`
	fun parse_options(args: Collection[String]) do
		opts.parse(args)

		if opt_stub_man.value then
			stub_man_options
			exit 0
		end
	end

	# Return the remaining args once options are parsed by `from_args`
	fun args: Array[String] do return opts.rest

	# Name, usage and synopsis of the tool.
	# It is mainly used in `usage`.
	# Should be correctly set by the client before calling `usage`
	# A multi-line string is recommended.
	#
	# eg. `"Usage: tool [OPTION]... [FILE]...\nDo some things."`
	var tool_description: String = "Usage: [OPTION]... [ARG]..." is writable

	# Was the `--help` option requested?
	fun help: Bool do return opt_help.value

	# Display `tool_description` and options usage in console
	fun usage do
		print tool_description
		print "\nOptions:"
		opts.usage
	end

	# Generate a manpage stub from `self`
	fun stub_man_options do
		var lines = tool_description.split("\n")
		var name = sys.program_name.basename
		var syn = lines.shift
		print "# NAME"
		print ""
		if lines.not_empty then
			printn "{name} - "
			print lines.join("\n")
			print ""
		end
		print "# SYNOPSIS"
		print ""
		print syn.replace("Usage: ", "")
		print ""
		print "# OPTIONS"
		for o in opts.options do
			if o.hidden then continue

			var first = true
			print ""
			printn "### "
			for n in o.names do
				if first then first = false else printn ", "
				printn "`{n}`"
			end
			print ""
			print "{o.helptext}."
		end
		exit 0
	end
end
lib/config/config.nit:159,1--268,3