Packages
persist_config
0.2.4
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 configuration files and puts the current app in a module attribute.
## use PersistConfig
Supports the following options:
- `:app` - module attribute to hold the current app, 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"]
...
@path Application.get_env(@app, :path)
```
```elixir
use PersistConfig, app :my_app
...
@my_attr Application.get_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] do
Enum.each(files, fn file ->
file |> Mix.Config.read!() |> Mix.Config.persist()
@external_resource Path.expand(file)
end)
Module.put_attribute(__MODULE__, app, Mix.Project.config()[:app])
end
end
end