CHANGELOG.md

# Enviable Changelog

## 2.0.0 / 2025-12-26

- Breaking changes:

  - Enviable supports Elixir 1.17+ only.

  - Deprecated functions have been removed: `get_env_boolean/2`,
    `get_env_integer/2`, `fetch_env_boolean/2`, `fetch_env_integer/2`,
    `fetch_env_boolean!/2`, and `fetch_env_integer!/2`

  - The default value for `boolean_downcase` and `downcase` for boolean
    conversion is `:default`. This also required changing some conversion types
    to distinguish between boolean case conversion and atom case conversion.

  - The default value for `case` on `base16`, `base32`, and `hex32` conversion
    has changed from `:upper` to `:mixed`.

## 1.7.0 / 2025-10-15

> The next major version of Enviable will support Elixir 1.17+ only.

- Added support for timeout values processed through [`to_timeout`][to_timeout].

  - Added a parser built with [`nimble_parsec`][nimble_parsec] to parse timeout
    strings. This parser (Enviable.Conversion.TimeoutParser) and unit tests were
    developed with the assistance of [Kiro][kiro] with
    [Timeout Values][timeout-values] as the initial prompt with human review and
    revision.

## 1.6.0 / 2025-08-12

- Improved examples for using [`Dotenvy`][dotenvy] and added references to
  [`Nvir`][nvir] as a compatible library.

- Added support for the new JSON module in Elixir 1.18.

- Added support for [Decimal][decimal].

## 1.5.0 / 2025-03-04

- Fixed a bug with `list` conversion for `get_env_as_list` and `get_env_as`
  where support for a `:default` value was not included.

- Fixed a bug with `:downcase` conversions and nil values.

- Added a compile-time configuration option to change the default boolean
  `:downcase` option. The default value is currently `false` (do not downcase).

  The next major version of Enviable will change this to `:default`, as it
  should not matter whether the matched value is `true`, `TRUE`, or `True` for
  boolean tests.

- Added `:upcase` option to `atom` and `safe_atom` conversions.

- Fixed `:json_engine` configuration so that it is properly compile-time and
  referenced. The JSON parsing code was looking this up at runtime under the
  wrong key.

- Added support for `{m, f, a}` specification for `:json_engine` configuration
  or the `:engine` parameter for JSON conversion.

## 1.4.0 / 2025-02-11

- Added `list` conversion for delimiter-separated lists. This supports all
  options of `String.split/3`.

- Added `*_env_as_TYPE/2` functions for all encoded conversions (`base16`,
  `base32`, `hex32`, `base64`, `url_base64`, and `list`).

- Internal:

  - Added an internal config module to split the configuration from the
    conversion code for improved readability.

  - Updated doc names to how I now structure my projects.

  - Add [`excoveralls`][excoveralls] for coverage.

## 1.3.0 / 2025-01-16

- Added explicit functions for retrieval and conversion of primitives to assist
  with language servers and IDEs as an alternative to `*_env_as/3` functions.
  Most of these new functions are `*_env_as_TYPE/2`, but several are
  `*_env_as_TYPE/1` as there are no applicable options.

  Encoded conversions (`:base*`) do not have named functions and must be
  accessed through `*_env_as/3`.

- Soft-deprecated `*_env_integer` and `*_env_boolean` functions in favour of
  `*_env_as_integer` and `*_env_as_boolean`. There will be at least one release
  of Enviable 1.x which marks these functions as deprecated so that compiler
  warnings are generated.

## 1.2.1 / 2025-01-02

- Fixed a function definition bug with `fetch_env_as/3` and `fetch_env_as!/3`
  preventing them from being `fetch_env_as/2` and `fetch_env_as!/2`.

## 1.2.0 / 2024-12-29

- Added conversions for `log_level`.
- Add Elixir 1.18 / OTP 27 to the test matrix.
- Update dependencies.
- Add [`mise`][mise] configuration.
- Fix dialyzer configuration.

## 1.1.0 / 2024-12-22

- Extended conversions through `get_env_as/3`, `fetch_env_as/3`, and
  `fetch_env_as!/3`.

- Fixed more documentation issues.

## 1.0.1 / 2024-12-11

- Fixed documentation issues.

## 1.0.0 / 2024-12-10

- Initial release.

[decimal]: https://hexdocs.pm/decimal/readme.html
[dotenvy]: https://hexdocs.pm/dotenvy/readme.html
[excoveralls]: https://hexdocs.pm/excoveralls/readme.html
[kiro]: https://kiro.dev
[mise]: https://mise.jdx.dev
[nimble_parsec]: https://hexdocs.pm/nimble_parsec/NimbleParsec.html
[nvir]: https://hexdocs.pm/nvir/readme.html
[timeout-values]: `m:Enviable#fetch_env_as_timeout/1-timeout-values`
[to_timeout]: https://hexdocs.pm/elixir/Kernel.html#to_timeout/1