Configuration file for Popcorn apps

import popcorn
import popcorn::pop_config

# Build config from default values
var config = new AppConfig
config.parse_options(args)

# Change config values
config.ini["app.port"] = 3001.to_s

# Use options
var app = new App
app.listen(config.app_host, config.app_port)

Introduced properties

fun app_host: String

popcorn :: AppConfig :: app_host

Web app host name
fun app_hostname: String

popcorn :: AppConfig :: app_hostname

Displayed host name config
fun app_port: Int

popcorn :: AppConfig :: app_port

Web app port
fun client: MongoClient

popcorn :: AppConfig :: client

Mongo db client
protected fun client=(client: MongoClient)

popcorn :: AppConfig :: client=

Mongo db client
fun db: MongoDb

popcorn :: AppConfig :: db

Mongo db instance
protected fun db=(db: MongoDb)

popcorn :: AppConfig :: db=

Mongo db instance
fun db_host: String

popcorn :: AppConfig :: db_host

MongoDB server used for data persistence
fun db_name: String

popcorn :: AppConfig :: db_name

MongoDB DB used for data persistence
fun default_db_host: String

popcorn :: AppConfig :: default_db_host

Default database host string for MongoDb
protected fun default_db_host=(default_db_host: String)

popcorn :: AppConfig :: default_db_host=

Default database host string for MongoDb
fun default_db_name: String

popcorn :: AppConfig :: default_db_name

Default database hostname
protected fun default_db_name=(default_db_name: String)

popcorn :: AppConfig :: default_db_name=

Default database hostname
fun opt_db_host: OptionString

popcorn :: AppConfig :: opt_db_host

MongoDb host name
protected fun opt_db_host=(opt_db_host: OptionString)

popcorn :: AppConfig :: opt_db_host=

MongoDb host name
fun opt_db_name: OptionString

popcorn :: AppConfig :: opt_db_name

MongoDb database name
protected fun opt_db_name=(opt_db_name: OptionString)

popcorn :: AppConfig :: opt_db_name=

MongoDb database name
fun opt_host: OptionString

popcorn :: AppConfig :: opt_host

Host name to bind on (will overwrite the config one).
protected fun opt_host=(opt_host: OptionString)

popcorn :: AppConfig :: opt_host=

Host name to bind on (will overwrite the config one).
fun opt_hostname: OptionString

popcorn :: AppConfig :: opt_hostname

Displayed host name
protected fun opt_hostname=(opt_hostname: OptionString)

popcorn :: AppConfig :: opt_hostname=

Displayed host name
fun opt_port: OptionInt

popcorn :: AppConfig :: opt_port

Port number to bind on (will overwrite the config one).
protected fun opt_port=(opt_port: OptionInt)

popcorn :: AppConfig :: opt_port=

Port number to bind on (will overwrite the config one).
fun tracker: PopTracker

popcorn :: AppConfig :: tracker

Tracker handler
protected fun tracker=(tracker: PopTracker)

popcorn :: AppConfig :: tracker=

Tracker handler
fun tracker_logs: TrackerRepo

popcorn :: AppConfig :: tracker_logs

Logs collection
protected fun tracker_logs=(tracker_logs: TrackerRepo)

popcorn :: AppConfig :: tracker_logs=

Logs collection

Redefined properties

redef type SELF: AppConfig

popcorn $ AppConfig :: SELF

Type of this instance, automatically specialized in every class
redef fun default_config_file: String

popcorn $ AppConfig :: default_config_file

Default config file path
redef fun default_config_file=(default_config_file: String)

popcorn $ AppConfig :: default_config_file=

Default config file path
redef init init

popcorn $ AppConfig :: init

redef init init

popcorn :: pop_repos $ AppConfig :: 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 app_host: String

popcorn :: AppConfig :: app_host

Web app host name
fun app_hostname: String

popcorn :: AppConfig :: app_hostname

Displayed host name config
fun app_port: Int

popcorn :: AppConfig :: app_port

Web app port
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 client: MongoClient

popcorn :: AppConfig :: client

Mongo db client
protected fun client=(client: MongoClient)

popcorn :: AppConfig :: client=

Mongo db client
fun config_file: String

config :: IniConfig :: config_file

Return the config file path from options or the default
fun db: MongoDb

popcorn :: AppConfig :: db

Mongo db instance
protected fun db=(db: MongoDb)

popcorn :: AppConfig :: db=

Mongo db instance
fun db_host: String

popcorn :: AppConfig :: db_host

MongoDB server used for data persistence
fun db_name: String

popcorn :: AppConfig :: db_name

MongoDB DB used for data persistence
fun default_config_file: String

config :: IniConfig :: default_config_file

Default config file path
fun default_config_file=(default_config_file: String)

config :: IniConfig :: default_config_file=

Default config file path
fun default_db_host: String

popcorn :: AppConfig :: default_db_host

Default database host string for MongoDb
protected fun default_db_host=(default_db_host: String)

popcorn :: AppConfig :: default_db_host=

Default database host string for MongoDb
fun default_db_name: String

popcorn :: AppConfig :: default_db_name

Default database hostname
protected fun default_db_name=(default_db_name: String)

popcorn :: AppConfig :: default_db_name=

Default database hostname
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?
fun ini: IniFile

config :: IniConfig :: ini

Config tree used to store config options
protected fun ini=(ini: IniFile)

config :: IniConfig :: ini=

Config tree used to store config options
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_config: OptionString

config :: IniConfig :: opt_config

Path to app config file
protected fun opt_config=(opt_config: OptionString)

config :: IniConfig :: opt_config=

Path to app config file
fun opt_db_host: OptionString

popcorn :: AppConfig :: opt_db_host

MongoDb host name
protected fun opt_db_host=(opt_db_host: OptionString)

popcorn :: AppConfig :: opt_db_host=

MongoDb host name
fun opt_db_name: OptionString

popcorn :: AppConfig :: opt_db_name

MongoDb database name
protected fun opt_db_name=(opt_db_name: OptionString)

popcorn :: AppConfig :: opt_db_name=

MongoDb database name
fun opt_help: OptionBool

config :: Config :: opt_help

Help option
protected fun opt_help=(opt_help: OptionBool)

config :: Config :: opt_help=

Help option
fun opt_host: OptionString

popcorn :: AppConfig :: opt_host

Host name to bind on (will overwrite the config one).
protected fun opt_host=(opt_host: OptionString)

popcorn :: AppConfig :: opt_host=

Host name to bind on (will overwrite the config one).
fun opt_hostname: OptionString

popcorn :: AppConfig :: opt_hostname

Displayed host name
protected fun opt_hostname=(opt_hostname: OptionString)

popcorn :: AppConfig :: opt_hostname=

Displayed host name
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
fun opt_port: OptionInt

popcorn :: AppConfig :: opt_port

Port number to bind on (will overwrite the config one).
protected fun opt_port=(opt_port: OptionInt)

config :: Config :: opt_port=

protected fun opt_port=(opt_port: OptionInt)

popcorn :: AppConfig :: opt_port=

Port number to bind on (will overwrite the config one).
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 tracker: PopTracker

popcorn :: AppConfig :: tracker

Tracker handler
protected fun tracker=(tracker: PopTracker)

popcorn :: AppConfig :: tracker=

Tracker handler
fun tracker_logs: TrackerRepo

popcorn :: AppConfig :: tracker_logs

Logs collection
protected fun tracker_logs=(tracker_logs: TrackerRepo)

popcorn :: AppConfig :: tracker_logs=

Logs collection
fun usage

config :: Config :: usage

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

Ancestors

class Config

config :: Config

Basic configuration class
interface Object

core :: Object

The root of the class hierarchy.

Parents

class IniConfig

config :: IniConfig

Configuration class based on a INI file.

Class definitions

popcorn $ AppConfig
# Configuration file for Popcorn apps
#
# ~~~
# import popcorn
# import popcorn::pop_config
#
# # Build config from default values
# var config = new AppConfig
# config.parse_options(args)
#
# # Change config values
# config.ini["app.port"] = 3001.to_s
#
# # Use options
# var app = new App
# app.listen(config.app_host, config.app_port)
# ~~~
class AppConfig
	super IniConfig

	redef var default_config_file: String = "app.ini"

	# Host name to bind on (will overwrite the config one).
	var opt_host = new OptionString("Host to bind the server on", "--host")

	# Web app host name
	#
	# * key: `app.host`
	# * default: `localhost`
	fun app_host: String do return opt_host.value or else ini["app.host"] or else "localhost"

	# Port number to bind on (will overwrite the config one).
	var opt_port = new OptionInt("Port number to use", -1, "--port")

	# Web app port
	#
	# * key: `app.port`
	# * default: `3000`
	fun app_port: Int do
		var opt = opt_port.value
		if opt > -1 then return opt
		var val = ini["app.port"]
		if val != null then return val.to_i
		return 3000
	end

	# Displayed host name
	#
	# Specify this option if you need a qualified hostname to use within your handlers
	# and `app_host` requires something else like an IP to bind.
	# Really useful if the popcorn app runs behind a proxy.
	#
	# Default is `"{app_host}:{app_port}"`
	var opt_hostname = new OptionString("Displayed host name", "--hostname")

	# Displayed host name config
	#
	# * key: `app.hostname`
	# * default: `"{app_host}:{app_port}"`
	fun app_hostname: String do
		var opt = opt_hostname.value
		if opt != null then return opt
		var cfg = ini["app.hostname"]
		if cfg != null then return cfg
		var res = app_host
		if app_port != 80 then res = "{res}:{app_port}"
		return res
	end

	init do
		super
		add_option(opt_host, opt_port, opt_hostname)
	end
end
lib/popcorn/pop_config.nit:82,1--155,3

popcorn :: pop_repos $ AppConfig
redef class AppConfig

	# Default database host string for MongoDb
	var default_db_host = "mongodb://mongo:27017/"

	# Default database hostname
	var default_db_name = "popcorn"

	# MongoDb host name
	var opt_db_host = new OptionString("MongoDb host", "--db-host")

	# MongoDb database name
	var opt_db_name = new OptionString("MongoDb database name", "--db-name")

	# MongoDB server used for data persistence
	fun db_host: String do return opt_db_host.value or else ini["db.host"] or else default_db_host

	# MongoDB DB used for data persistence
	fun db_name: String do return opt_db_name.value or else ini["db.name"] or else default_db_name

	init do
		super
		add_option(opt_db_host, opt_db_name)
	end

	# Mongo db client
	var client = new MongoClient(db_host) is lazy

	# Mongo db instance
	var db: MongoDb = client.database(db_name) is lazy
end
lib/popcorn/pop_repos.nit:126,1--156,3

popcorn :: pop_tracker $ AppConfig
redef class AppConfig

	# Logs collection
	var tracker_logs = new TrackerRepo(db.collection("tracker_logs"))

	# Tracker handler
	var tracker = new PopTracker(self)
end
lib/popcorn/pop_tracker.nit:52,1--59,3