In Elixir applications, config/runtime.exs is often used to parse
environment variables from System.get_env2/ and friends, and convert into
Application configuration.
Since environment variables can only be strings, it is often necessary to
cast from string values into booleans and integer values. E.g.
config :my_app, :bool_value, System.get_env("BOOL_VALUE") == "true"
config :my_app, :int_value, String.to_string(System.get_env("INT_VALUE",
"5"))
While there are entire libraries that deal with advanced runtime
configuration, like Vapor <https://github.com/elixir-toniq/vapor> and
elixir-specify <https://github.com/Qqwy/elixir-specify>, I believe there is
an opportunity to simplify common patterns and duplicative code in Elixir
configuration that often leads to confusion and edge case issues.
My proposal is to add parsing for both booleans and integers to environment
variable parsing. As an example:
config :my_app, :bool_value, System.get_env_as!("BOOL_VALUE", "false", as:
:boolean)
config :my_app, :int_value, System.get_env_as!("INT_VALUE", "5", as:
:integer)
The trickiness would be in the acceptable range of edge case values. For
example, "1" and "0" are often used for boolean values, in addition to
"TRUE" and "FALSE". I believe there could be a reasonable compromise and
appropriate documentation for addressing these issues.
More complex parsing, such as floats and custom data types would not be
supported.
--
You received this message because you are subscribed to the Google Groups
"elixir-lang-core" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To view this discussion visit
https://groups.google.com/d/msgid/elixir-lang-core/03c630fb-affc-4f80-a7c8-6e4a694b8406n%40googlegroups.com.