# Changelog
**Cldr Utils from version 2.27.0 requires Elixir 1.12 or later**
## Cldr Utils version 2.28.0
This is the changelog for Cldr Utils v2.28.0 released on July 10th, 2024. For older changelogs please consult the release tag on [GitHub](https://github.com/elixir-cldr/cldr_utils/tags)
### Bug Fixes
* Fix `Cldr.Json.decode!/1` to return only the decoded JSON.
### Enhancements
* Add `Cldr.Json.decode!/2` that implements the `keys: :atoms` option from `Jason`.
## Cldr Utils version 2.27.0
This is the changelog for Cldr Utils v2.27.0 released on June 23rd, 2024. For older changelogs please consult the release tag on [GitHub](https://github.com/elixir-cldr/cldr_utils/tags)
### Minimum Elixir version
* `cldr_utils` version 2.27.0 and later requires Elixir 1.12 or later.
### Enhancements
* Adds `Cldr.Json.decode!/1` that delegates to `:json.decode/1`. This allows `Cldr.Json` to be configured as a `json_library` in `ex_cldr` for OTP versions 27 and later. For example:
```elixir
config :ex_cldr,
json_library: Cldr.Json
```
* Refactor some tests so they work on older Elixir versions without `sigil_c`.
## Cldr Utils version 2.26.0
This is the changelog for Cldr Utils v2.25.0 released on May 28th, 2024. For older changelogs please consult the release tag on [GitHub](https://github.com/elixir-cldr/cldr_utils/tags)
### Bug Fixes
* Fix warnings on Elixir 1.17. This primarily relates to charlists constants now required to use `sigil_c` to avoid warnings. As a result, tests will only work on Elixir 1.16 and later even though support for the library is for Elixir 1.11 and later.
## Cldr Utils version 2.25.0
This is the changelog for Cldr Utils v2.25.0 released on March 20th, 2024. For older changelogs please consult the release tag on [GitHub](https://github.com/elixir-cldr/cldr_utils/tags)
### Bug Fixes
* Fix `Cldr.Math.pow/2` when the exponent is in the range 0 < n < 1.
### Enhancements
* Adds `Cldr.Math.mult/2`, `Cldr.Math.div/2`, `Cldr.Math.add/2` and `Cldr.Math.sub/2` to operate on integers, floats and Decimals.
## Cldr Utils version 2.24.2
This is the changelog for Cldr Utils v2.24.2 released on November 2nd, 2023. For older changelogs please consult the release tag on [GitHub](https://github.com/elixir-cldr/cldr_utils/tags)
### Bug Fixes
* Fix deprecation warnings for Elixir 1.16.
## Cldr Utils version 2.24.1
This is the changelog for Cldr Utils v2.24.1 released on June 17th, 2023. For older changelogs please consult the release tag on [GitHub](https://github.com/elixir-cldr/cldr_utils/tags)
**Cldr Utils now requires Elixir 1.11 or later**
### Bug Fixes
* Resolve host certificate stores at runtime, not compile time. Thanks to @joshk for the PR. Closes #7.
## Cldr Utils version 2.24.0
This is the changelog for Cldr Utils v2.24.0 released on May 22nd, 2023. For older changelogs please consult the release tag on [GitHub](https://github.com/elixir-cldr/cldr_utils/tags)
**Cldr Utils now requires Elixir 1.11 or later**
### Enhancements
* Adds `Cldr.Utils.otp_version/0` to return the OTP version as a string. Copied with thanks and appreciation from the `Hex` source.
## Cldr Utils version 2.23.1
This is the changelog for Cldr Utils v2.23.0 released on May 4th, 2023. For older changelogs please consult the release tag on [GitHub](https://github.com/elixir-cldr/cldr_utils/tags)
**Cldr Utils now requires Elixir 1.11 or later**
### Bug Fixes
* Make parsing `HTTP_PROXY` values more resilient to invalid URLs.
## Cldr Utils version 2.23.0
This is the changelog for Cldr Utils v2.23.0 released on May 4th, 2023. For older changelogs please consult the release tag on [GitHub](https://github.com/elixir-cldr/cldr_utils/tags)
**Cldr Utils now requires Elixir 1.11 or later**
### Enhancements
* Adds support for https proxy for `Cldr.Http.get/2`. The proxy can be specified as an option to to `Cldr.Http.get/2`, as a configuration option under the `:ex_cldr[:https_proxy]` key, or from the environment variables `HTTPS_PROXY` or `https_proxy`. Thanks to @d-led for the PR and issue.
## Cldr Utils version 2.22.0
This is the changelog for Cldr Utils v2.22.0 released on March 25th, 2023. For older changelogs please consult the release tag on [GitHub](https://github.com/elixir-cldr/cldr_utils/tags)
**Cldr Utils now requires Elixir 1.11 or later**
### Enhancements
* Adds `:timeout` and `:connection_timeout` options to `Cldr.Http.get/2`. The defaults are `[timeout: 60_000, connection_timeout: 120_000]`. The environment variables `CLDR_HTTP_TIMEOUT` and `CLDR_HTTPS_CONNECTION_TIMEOUT` can also be used to set the timeouts. The prededence is `options[:timeout] -> environment variable -> default.`
## Cldr Utils version 2.21.0
This is the changelog for Cldr Utils v2.21.0 released on January 27th, 2023. For older changelogs please consult the release tag on [GitHub](https://github.com/elixir-cldr/cldr_utils/tags)
**Cldr Utils now requires Elixir 1.11 or later**
### Enhancements
* Add `:verify_peer` as an option to `Cldr.Http.get/1` and `Cldr.Http.get_with_headers/1`
## Cldr Utils version 2.20.0
This is the changelog for Cldr Utils v2.20.0 released on January 27th, 2023. For older changelogs please consult the release tag on [GitHub](https://github.com/elixir-cldr/cldr_utils/tags)
**Cldr Utils now requires Elixir 1.11 or later**
### Enhancements
* Adds `Cldr.Http.get_with_headers/1` that will return the headers from the response as well as the body.
* Support headers when sending a request with `Cldr.Http.get/1` and `Cldr.Http.get_with_headers/1`
* Add `:verify_peer` as an option to `Cldr.Http.get/1` and `Cldr.Http.get_with_headers/1`
## Cldr Utils version 2.19.2
This is the changelog for Cldr Utils v2.19.2 released on January 25th, 2023. For older changelogs please consult the release tag on [GitHub](https://github.com/elixir-cldr/cldr_utils/tags)
**Cldr Utils now requires Elixir 1.11 or later**
### Bug Fixes
* Relaxes the requirement for the optional [castore](https://hex.pm/packages/castore) library. Thanks to @maennchen for the PR. Closes #6.
## Cldr Utils version 2.19.1
This is the changelog for Cldr Utils v2.19.1 released on August 23rd, 2022. For older changelogs please consult the release tag on [GitHub](https://github.com/elixir-cldr/cldr_utils/tags)
**Cldr Utils now requires Elixir 1.11 or later**
### Bug Fixes
* Use only TLS 1.2 on OTP versions less than 25.
## Cldr Utils version 2.19.0
This is the changelog for Cldr Utils v2.19.0 released on August 22nd, 2022. For older changelogs please consult the release tag on [GitHub](https://github.com/elixir-cldr/cldr_utils/tags)
**Cldr Utils now requires Elixir 1.11 or later**
### Enhancements
* Sets SNI option for SSL connections
* Supports `CLDR_UNSAFE_HTTPS` environment variable option which, if set to anything other than `FALSE`, `false`, `nil` or `NIL` will not perform peer verification for HTTPS requests. This may be used in circumstances where peer verification is failing but if generally not recommended.
## Cldr Utils version 2.18.0
This is the changelog for Cldr Utils v2.18.0 released on July 31st, 2022. For older changelogs please consult the release tag on [GitHub](https://github.com/elixir-cldr/cldr_utils/tags)
**Cldr Utils now requires Elixir 1.11 or later**
### Bug Fixes
* Fix deprecation warnings for Elixir 1.14.
## Cldr Utils version 2.17.2
This is the changelog for Cldr Utils v2.17.2 released on May 8th, 2022. For older changelogs please consult the release tag on [GitHub](https://github.com/elixir-cldr/cldr_utils/tags)
### Bug Fixes
* Harden the SSL options for `Cldr.Http.get/1` in line with the recommendations at https://erlef.github.io/security-wg/secure_coding_and_deployment_hardening/ssl
## Cldr Utils version 2.17.1
This is the changelog for Cldr Utils v2.17.1 released on February 21st, 2022. For older changelogs please consult the release tag on [GitHub](https://github.com/elixir-cldr/cldr_utils/tags)
### Bug Fixes
* Fix `Cldr.Map.invert/2` to use `Enum.map/2` not `Enum.flat_map/2`
## Cldr Utils version 2.17.0
This is the changelog for Cldr Utils v2.17.0 released on October 27th, 2021. For older changelogs please consult the release tag on [GitHub](https://github.com/elixir-cldr/cldr_utils/tags)
### Enhancements
* Add `:duplicates` option to `Cldr.Map.invert/2` to determine how to handle duplicate values after inversion. The options are:
* `nil` or `false` which is the default and means only one value is kept. `Map.new/1` is used meanng the selected value is non-deterministic.
* `:keep` meaning duplicate values are returned in a list
* `:shortest` means the shortest duplicate is kept. This operates on string or atom values.
* `:longest` means the shortest duplicate is kept. This operates on string or atom values.
### Bug Fixes
* Don't attempt to convert calendar era dates to iso days - do that when required in `ex_cldr_calendars`
* Remove `Cldr.Calendar.Conversion` module which is not required
* Fix `Cldr.Map.deep_map/3` so that the `:filter` option is propogated correctly when `:only/:except` is also specified.
## Cldr Utils version 2.17.0-rc.0
This is the changelog for Cldr Utils v2.17.0 released on October 5th, 2021. For older changelogs please consult the release tag on [GitHub](https://github.com/elixir-cldr/cldr_utils/tags)
### Bug Fixes
* Don't attempt to convert calendar era dates to iso days - do that when required in `ex_cldr_calendars`
* Remove `Cldr.Calendar.Conversion` module which is not required
* Fix `Cldr.Map.deep_map/3` so that the `:filter` option is propogated correctly when `:only/:except` is also specified.
### Enhancements
* Add `:duplicates` option to `Cldr.Map.invert/2` to determine how to handle duplicate values after inversion. The options are:
* `nil` or `false` which is the default and means only one value is kept. `Map.new/1` is used meanng the selected value is non-deterministic.
* `:keep` meaning duplicate values are returned in a list
* `:shortest` means the shortest duplicate is kept. This operates on string or atom values.
* `:longest` means the shortest duplicate is kept. This operates on string or atom values.
## Cldr Utils version 2.16.0
This is the changelog for Cldr Utils v2.16.0 released on June 11th, 2021. For older changelogs please consult the release tag on [GitHub](https://github.com/elixir-cldr/cldr_utils/tags)
### Enhancements
* Add `Cldr.Map.extract_strings/2`
* Make resolver a parameter to `Cldr.Map.deep_merge/3`
* Make resolver a parameter to `Cldr.Map.merge_map_list/2`
* Add `Cldr.Map.prune/2` that prunes (deletes) branches from a (possibly deeply nested) map
* Add `Cldr.Map.invert/1` that inverts the `{key, value}` of a map to be `{value, key}` and if `value` is a list, one new map entry for each element of `value` will be created (mapped to `key`)
## Cldr Utils version 2.15.1
This is the changelog for Cldr Utils v2.15.1 released on March 16th, 2021. For older changelogs please consult the release tag on [GitHub](https://github.com/elixir-cldr/cldr_utils/tags)
### Bug Fixes
* Fix `Cldr.Digit.to_number/2` for floats. Thanks for the report from @jlauemoeller. Fixes #15.
## Cldr Utils version 2.15.0
This is the changelog for Cldr Utils v2.15.0 released on March 5th, 2021. For older changelogs please consult the release tag on [GitHub](https://github.com/elixir-cldr/cldr_utils/tags)
### Enhancements
* Adds the options `:filter`, `:reject` and `:skip` to `Cldr.Map.deep_map/3` that work on entire branches of a map.
## Cldr Utils version 2.14.1
This is the changelog for Cldr Utils v2.14.1 released on February 17th, 2021. For older changelogs please consult the release tag on [GitHub](https://github.com/elixir-cldr/cldr_utils/tags)
### Bug Fixes
* Merge the fixes from cldr_utils version 2.13.3 for `Cldr.Math.power/2`
## Cldr Utils version 2.14.0
This is the changelog for Cldr Utils v2.14.0 released on November 7th, 2020. For older changelogs please consult the release tag on [GitHub](https://github.com/elixir-cldr/cldr_utils/tags)
### Enhancements
* Adds `Cldr.Http.get/1` to download from `https` URLs using `:httpc` but with certificate vertification enabled (it is not enabled by default in the `:httpc` module).
## Cldr Utils version 2.13.3
This is the changelog for Cldr Utils v2.13.3 released on February 17th, 2021. For older changelogs please consult the release tag on [GitHub](https://github.com/elixir-cldr/cldr_utils/tags)
### Bug fixes
* Fix `Cldr.Math.power/2` when both arguments are Decimal and the power is negative.
* Update the docs for `Cldr.Math.round_significant/2` to note that rounding floats to significant digits cannot always return the expected precision since floats cannot represent all decimal numbers correctly.
## Cldr Utils version 2.13.2
This is the changelog for Cldr Utils v2.13.2 released on October 20th, 2020. For older changelogs please consult the release tag on [GitHub](https://github.com/elixir-cldr/cldr_utils/tags)
### Bug fixes
* Fix unused variable warning on OTP versions that do not include `:persistent_term` module. Thanks to @kianmeng.
## Cldr Utils version 2.13.1
This is the changelog for Cldr Utils v2.13.1 released on September 30th, 2020. For older changelogs please consult the release tag on [GitHub](https://github.com/elixir-cldr/cldr_utils/tags)
### Enhancements
* Add `Cldr.Decimal.parse/1` as a compatibiity layer for Decimal 1.x and 2.x
## Cldr Utils version 2.12.0
This is the changelog for Cldr Utils v2.12.0 released on September 29th, 2020. For older changelogs please consult the release tag on [GitHub](https://github.com/elixir-cldr/cldr_utils/tags)
### Enhancements
* Add `Cldr.Digit.number_of_trailing_zeros/1` to calculate the number of trailing zeros in an integer
## Cldr Utils version 2.11.0
This is the changelog for Cldr Utils v2.11.0 released on September 25th, 2020. For older changelogs please consult the release tag on [GitHub](https://github.com/elixir-cldr/cldr_utils/tags)
### Enhancements
* Provides `Cldr.Decimal.reduce/1` as a compatibility shim for Decimal 1.x and 2.x
* Provides `Cldr.Decimal.compare/2` as a compatibility shim for Decimal 1.x and 2.x
## Cldr Utils version 2.10.0
This is the changelog for Cldr Utils v2.10.0 released on September 8th, 2020. For older changelogs please consult the release tag on [GitHub](https://github.com/elixir-cldr/cldr_utils/tags)
### Enhancements
* Supports `Decimal` 1.6 or greater or `Decimal` 2.x or later
## Cldr Utils version 2.9.1
This is the changelog for Cldr Utils v2.9.1 released on May 3rd, 2020. For older changelogs please consult the release tag on [GitHub](https://github.com/elixir-cldr/cldr_utils/tags)
### Bug Fixes
* Fix compatibility with `ex_cldr` releases up to 2.13.0. Thanks to @hl for the report. Fixes #3.
## Cldr Utils version 2.9.0
This is the changelog for Cldr Utils v2.9.0 released on May 2nd, 2020. For older changelogs please consult the release tag on [GitHub](https://github.com/elixir-cldr/cldr_utils/tags)
### Enhancements
* Add `:level`, `:only` and `:except` options to `Cldr.Map.deep_map/3` and refactor functions that use it
* Add `Cldr.Enum.reduce_peeking/3` that is a simple reduce function that also passed the tail of the enum being reduced to enable a simple form of lookahead
* Refactor `Cldr.Math.round/2` implementation for floating point numbers that improves efficiency by about 100% since it avoids round trip conversion to `Decimal`
## Cldr Utils version 2.8.0
This is the changelog for Cldr Utils v2.8.0 released on February 14th, 2020. For older changelogs please consult the release tag on [GitHub](https://github.com/elixir-cldr/cldr_utils/tags)
### Enhancements
* Be more resilient of the availability of `:persistent_term` given that `get/2`, `get/1` and `:persistent_term` itself are available on different OTP releases. Thanks to @halostatue. Closes #2.
## Cldr Utils version 2.7.0
This is the changelog for Cldr Utils v2.7.0 released on January 31st, 2020. For older changelogs please consult the release tag on [GitHub](https://github.com/elixir-cldr/cldr_utils/tags)
### Enhancements
* Add `Cldr.String.to_underscore/1` that replaces "-" with "_"
## Cldr Utils version 2.6.0
This is the changelog for Cldr Utils v2.6.0 released on January 21st, 2020. For older changelogs please consult the release tag on [GitHub](https://github.com/elixir-cldr/cldr_utils/tags)
### Enhancements
* Support `Decimal` versions `~> 1.6 or 1.9 or 2.0`. Version 1.9 deprecates `Decimal.compare/2` in favour of `Decimal.cmp/2`. The upcoming `Decimal` version 2.0 deprecates `Decimal.cmp/2` in favour of a new implementation of `Decimal.compare/2` that conforms to Elixir norms and is required to support `Enum.sort/2` correctly. This version of `cldr_utils` detects the relevant version and adapts accordingly at compile time.
## Cldr Utils version 2.5.0
This is the changelog for Cldr Utils v2.5.0 released on October 22nd, 2019. For older changelogs please consult the release tag on [GitHub](https://github.com/elixir-cldr/cldr_utils/tags)
### Enhancements
* Add `Cldr.Macros.warn_once/3` to log a warning, but only once for a given key
## Cldr Utils version 2.4.0
This is the changelog for Cldr Utils v2.4.0 released on August 23rd, 2019. For older changelogs please consult the release tag on [GitHub](https://github.com/elixir-cldr/cldr_utils/tags)
### Enhancements
* Add `Cldr.String.hash/1` to implement a polynomial rolling hash function
## Cldr Utils version 2.3.0
This is the changelog for Cldr Utils v2.3.0 released on June 15th, 2019. For older changelogs please consult the release tag on [GitHub](https://github.com/elixir-cldr/cldr_utils/tags)
### Enhancements
* Adds `doc_since/1` and `calendar_impl/0` to support conditional compilation based upon Elixir versions
## Cldr Utils version 2.2.0
This is the changelog for Cldr Utils v2.2.0 released on March 25th, 2019. For older changelogs please consult the release tag on [GitHub](https://github.com/elixir-cldr/cldr_utils/tags)
### Enhancements
* Add `Cldr.Math.div_amod/2`
## Cldr Utils version 2.1.0
This is the changelog for Cldr Utils v2.1.0 released on March 10th, 2019. For older changelogs please consult the release tag on [GitHub](https://github.com/elixir-cldr/cldr_utils/tags)
### Bug Fixes
* `Cldr.Map.integerize_keys/1` now properly processes negative integer keys. Minor version change to make it easier to peg versions in upstream packages.
## Cldr Utils version 2.0.5
This is the changelog for Cldr Utils v2.0.4 released on Jnauary 3rd, 2018. For older changelogs please consult the release tag on [GitHub](https://github.com/elixir-cldr/cldr_utils/tags)
### Bug Fixes
* Fixes `Cldr.Math.round/3` for floats when rounding is > 0 digits
## Cldr Utils version 2.0.4
This is the changelog for Cldr Utils v2.0.4 released on Decmber 15th, 2018. For older changelogs please consult the release tag on [GitHub](https://github.com/elixir-cldr/cldr_utils/tags)
### Bug Fixes
* Fixes `Cldr.Math.round/3` to be compatible with `Decimal.round/3` and `Kernel.round/1`
## Cldr Utils version 2.0.3
This is the changelog for Cldr Utils v2.0.3 released on Decmber 8th, 2018. For older changelogs please consult the release tag on [GitHub](https://github.com/elixir-cldr/cldr_utils/tags)
### Bug Fixes
* Fixed an error in `Cldr.Math.round/3` for `Decimal` numbers where the value being rounded is < 1 but greater than 0 whereby the sign was being returned as `true` instead of `1`.
## Cldr Utils version 2.0.2
This is the changelog for Cldr Utils v2.0.2 released on November 23rd, 2018. For older changelogs please consult the release tag on [GitHub](https://github.com/elixir-cldr/cldr_utils/tags)
### Enhancements
* Replace *additional* deprecated `Decimal.new/1` with `Decimal.from_float/1` where required
## Cldr Utils version 2.0.1
This is the changelog for Cldr Utils v2.0.1 released on November 23rd, 2018. For older changelogs please consult the release tag on [GitHub](https://github.com/elixir-cldr/cldr_utils/tags)
### Enhancements
* Replace deprecated `Decimal.new/1` with `Decimal.from_float/1` where required
## Cldr Utils version 2.0.0
This is the changelog for Cldr Utils v2.0.0 released on October 29th, 2018. For older changelogs please consult the release tag on [GitHub](https://github.com/elixir-cldr/cldr_utils/tags)
### Enhancements
* Initial release extracted from [ex_cldr](https://hex.pm/packages/ex_cldr)