PersistConfig (Persist Config v0.4.10) View Source

Persists the configurations from a list of files during compilation. Also puts the current application name in a module attribute and provides a get_env macro for concise configuration value retrieval.

Installation

Add persist_config to your list of dependencies in mix.exs. Also include the required configuration files in the package definition of mix.exs:

def project do
  [
    app: :your_app,
    ...
    deps: deps(),
    package: package(),
    ...
  ]
end
...
def deps do
  [
    {:persist_config, "~> 0.4", runtime: false}
  ]
end
...
defp package do
  [
    files: ["lib", "mix.exs", "README*", "config/persist*.exs"],
    maintainers: [...],
    licenses: [...],
    links: %{...}
  ]
end

Usage

use PersistConfig supports the following options:

  • :app - module attribute to hold the current application name, defaults to :app
  • :files - wildcard paths, defaults to ["config/persist*.exs"]

Option :files lists the files whose configurations will be persisted.

Importing these files in config/config.exs is needless:

import Config
import_config "persist_this_config.exs"

Each entry represents a wildcard path relative to the root. If the list of paths is or ends up being empty, no configurations are persisted.

When your project is used as a dependency, this package will allow the specified configuration files to have their configurations persisted during compilation.

For example, you may configure some path to read an external file and you want to still read that very file when your app is a dependency (without and despite any path configuration in the parent app). To achieve this:

1. Use a module attribute as a constant:

use PersistConfig
...
@path get_env(:path)
...
words = File.read!(@path)

2. Create a config file named, say, config/persist_path.exs:

import Config
config :words_cache, path: "#{File.cwd!()}/assets/words.txt"

3. In mix.exs, specify a package definition like this:

defp package do
  [
    files: [... "assets/words.txt", "config/persist*.exs"],
    maintainers: [...],
    licenses: [...],
    links: %{...}
  ]
end

Note: Such configurations are global and should otherwise be avoided.

Example 1

use PersistConfig, files: ["config/persist_path.exs"]
...
@all_env Application.get_all_env(@app)
@path get_env(:path)

Example 2

use PersistConfig, app: :my_app
...
@my_attr Application.get_env(@my_app, :my_attr)

Example 3

use PersistConfig
...
defp log?, do: get_env(:log?, true)

Link to this section Summary

Functions

Persists the configurations from a list of files during compilation. Also puts the current application name in a module attribute and provides a get_env macro for concise configuration value retrieval.

Returns the value for key in in the current application's environment.

Link to this section Functions

Link to this macro

__using__(options \\ [])

View Source (macro)

Persists the configurations from a list of files during compilation. Also puts the current application name in a module attribute and provides a get_env macro for concise configuration value retrieval.

use PersistConfig supports the following options:

  • :app - module attribute to hold the current application name, defaults to :app
  • :files - wildcard paths, defaults to ["config/persist*.exs"]
Link to this macro

get_env(key, default \\ nil)

View Source (macro) (since 0.4.0)

Returns the value for key in in the current application's environment.

If the configuration parameter does not exist, returns the default value.