CHANGELOG.md

# 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.