Packages
persist_config
0.3.0
0.4.56
0.4.55
0.4.54
0.4.53
0.4.52
0.4.51
0.4.50
0.4.49
0.4.48
0.4.47
0.4.46
0.4.45
0.4.44
0.4.43
0.4.42
0.4.41
0.4.40
0.4.39
0.4.38
0.4.37
0.4.36
0.4.35
0.4.34
0.4.33
0.4.32
0.4.31
0.4.30
0.4.29
0.4.28
0.4.27
0.4.26
0.4.25
0.4.24
0.4.23
0.4.22
0.4.21
0.4.20
0.4.19
0.4.18
0.4.17
0.4.16
0.4.15
0.4.14
0.4.13
0.4.12
0.4.11
0.4.10
0.4.9
0.4.8
0.4.7
0.4.6
0.4.5
0.4.4
0.4.3
0.4.2
0.4.1
0.4.0
0.3.3
0.3.2
0.3.1
0.3.0
0.2.14
0.2.13
0.2.12
0.2.11
0.2.10
0.2.9
0.2.8
0.2.7
0.2.6
0.2.5
0.2.4
0.2.3
0.2.2
0.2.1
0.2.0
0.1.10
0.1.9
0.1.8
0.1.7
0.1.6
0.1.4
0.1.3
0.1.2
0.1.1
0.1.0
Persists configurations from given files at compile time.
Current section
Files
Jump to
Current section
Files
lib/persist_config.ex
defmodule PersistConfig do
@moduledoc """
Persists a list of configuration files and
puts the current application name in a module attribute.
Also includes macros 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"]`
Option `:files` lists the configuration files to be persisted.
These are typically imported in the `config/config.exs` file.
For example: `import_config "persist_this_config.exs"`.
Each entry represents a (wildcard) path relative to the root.
If the list is or ends up being empty, no files are persisted.
## Usage
```elixir
use PersistConfig, files: ["config/persist_path.exs"]
...
@all_env Application.get_all_env(@app)
@path fetch_env!(:path)
```
```elixir
use PersistConfig, app: :my_app
...
@my_attr Application.fetch_env!(@my_app, :my_attr)
```
"""
defmacro __using__(options \\ []) do
app = options[:app] || :app
files = options[:files] || ["config/persist*.exs"]
files = files |> Enum.map(&Path.wildcard/1) |> List.flatten()
quote bind_quoted: [app: app, files: files], unquote: true do
import unquote(__MODULE__)
Enum.each(files, fn file ->
file |> Config.Reader.read!() |> Application.put_all_env()
@external_resource Path.expand(file)
end)
Module.put_attribute(__MODULE__, app, Mix.Project.config()[:app])
end
end
@doc """
Returns the value for `key` in `app`'s environment.
If the configuration parameter does not exist, raises `ArgumentError`.
"""
@doc since: "0.3.0"
defmacro fetch_env!(app, key) do
quote bind_quoted: [app: app, key: key] do
Application.fetch_env!(app, key)
end
end
@doc """
Returns the value for `key` in the current application's environment.
If the configuration parameter does not exist, raises `ArgumentError`.
"""
@doc since: "0.3.0"
defmacro fetch_env!(key) do
app = Mix.Project.config()[:app]
fetch_env!(app, key)
end
end