ModuleConfig

A simple set of macros to help with module-specific configuration.

A common idiom in Elixir is to group configuration based on the module or subsystem where it is used. This looks something like the following:

config :my_app, MyModule,
  value1: :foo,
  value2: :bar

Retrieving those values with Application.get_env/3 can be cumbersome, since what you get back is not a single value, but a keyword list. ModuleConfig is a set of macros that make working with those values a bit easier.

To use it, use ModuleConfig in your module and pass the name of your app:

defmodule MyApp.MyModule do
  use ModuleConfig, otp_app: :my_app

  # ...
end

Now you can call config/1 to retrive the full configuration for that module as a map. You can optionally pass a keyword list of overrides that will be merged into the stored configuration.

config = config()
config.value1

# OR

config = config(other_value: :foo)
config.other_value

If you only want a single value, you can call get_config/2, which will return a single value.

value = get_config(:value1)

# OR

value = get_config(:value1, :default)

Installation

The package can be installed by adding module_config to your list of dependencies in mix.exs:

def deps do
  [
    {:module_config, "~> 1.0.0"}
  ]
end

The docs can be found at https://hexdocs.pm/module_config.