# Changelog
## Changelog for 2.5.0
### Enhancements
* Added `env_overrides` for overriding `default` and `required` attributes
per environment (e.g. `dev`, `test`, `prod`).
## Changelog for 2.4.2
### Bugfix
* Change from `Logger.warn/1` to `Logger.warning/1` to avoid deprecation
message on compile time.
* Updated dependencies.
## Changelog for 2.4.1
### Bugfix
* Bugfix: Documentation generation throwed warnings for custom Skogsra types.
* Updated dependencies.
## Changelog for 2.4.0
### Bugfix
* Bugfix: [YAML Provider] fixed bug where it would duplicate apps.
* Bugfix: [YAML Provider] fixed bug where regular lists weren't accepted as values.
* Migrated pipeline from Travis to Github Actions.
* Improved code coverage.
* Updated dependencies.
## Changelog for 2.3.3
### Enhancements
* Added `:neg_integer`, `:non_neg_integer` and `:pos_integer` as custom
types.
## Changelog for 2.3.2
### Bugfix
* Wrong spec in private function.
## Changelog for 2.3.1
### Bugfix
* Multiline docs in templates weren't properly commented.
## Changelog for 2.3.0
### Enhancements
* Added `preload/0` and `preload/1` functions for overriding Elixir config
values when config providers and OS system variables have precedence.
## Changelog for 2.2.3
### Bugfix
* When there is no default and it's not required, a variable should have the
variable's type and `nil` as return value e.g. for the variable `:my_var`
that returns integer, the spec would be as follows:
```elixir
@spec my_var() :: {:ok, nil | integer()} | {:error, binary()}
```
## Changelog for 2.2.2
### Enhancements
* Added `validate!/0` and `validate!/1` functions for checking whether the
required variables have values or not (thanks to
[Riccardo Binetti](https://github.com/rbino)).
* Travis-CI build now checking `format`, `credo`, `dialyzer` and `coveralls`.
## Changelog for 2.2.1
### Bugfix
* When no type is defined and it cannot be derived from the default value,
then it should return `any()` instead of `binary()`.
## Changelog for 2.2.0
### Enhancements
* Added JSON config provider.
* Added new `Skogsra.Binding` behaviour for adding custom variable bindings.
* New option `binding_order` for setting a custom order for variable binding
(defaults to `[:system, :config]`). Possible values:
+ `:system`: For loading OS environment variables.
+ `:config`: For loading application configuration variables.
+ `module()`: For loading variables using a custom module implementing
`Skogsra.Binding` behaviour.
* Added `binding_skip` option to skip one or several variable binding types
(defaults to `[]`).
### Breaking changes
* Improved YAML config provider by making it equivalent to the JSON provider.
### Deprecations
* The option `skip_config` was deprecated favoring `binding_skip: [:config]`.
* The option `skip_system` was deprecated favoring `binding_skip: [:system]`.
## Changelog for 2.1.1
### Bug fixes
* Fixed bug where `Skogsra.Type` couldn't be used as a type (see [Custom Type Fails at get_spec_type](https://github.com/gmtprime/skogsra/issues/4))
## Changelog for 2.1.0
### Enhancements
* Improved function specs.
* Improved generated docs.
* Added option to avoid automatically generated docs.
* Added function for OS environment variable generation for Unix, Releases
and Windows.
## Changelog for 2.0.4
### Enhancements
* Improved documentation.
## Changelog for 2.0.3
### Enhancements
* Improved errors when a variable is missing.
## Changelog for 2.0.2
### Enhancements
* Added `:module` built-in type.
* Added `:unsafe_module` built-in type.
## Changelog for 2.0.0
### Enhancements
* Added `Skogsra.Type` behaviour for defining custom types.
* Application configuration values are now casted as well to the defined
type in the `Skogsra` environment variable definition.
* Added YAML configuration provider.
## Changelog for 1.3.0
### Enhancements
* Namespaces now inherit values from default namespace.
* Favoring the use of `:persistent_term`s over `:ets` tables. This avoids the
creation of an application tree for this project, thus making it even
faster.
## Changelog for 1.2.1
### Bug fixes
* Fixed bug where `Skogsra.Cache` didn't work at compilation time.
## Changelog for 1.2.0
### Enhancements
* Added autogenerated reload functions.
* Added autogenerated setter functions.
* Improved documentation.
* Code rearrangement and refactor for maintainability.