# 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

  # ...

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()

# OR

config = config(other_value: :foo)

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"}

The docs can be found at