---
- version: 0.7.1
  date: 2021-07-10
  fixed:
  - |
    [memoizable] memoizable correctly handles cases where a method
    has unnamed params (e.g. happens when the new `...` syntax is used) (@flash-gordon)

- version: 0.7.0
  date: 2021-07-08
  fixed:
  - "[memoizable] warnings when using keyword arguments (@flash-gordon)"
  - "[deprecations] warnings show more relevant information about caller by default (@timriley)"
  changed:
  - Minimal Ruby version is 2.6
  - "[memoizable] memoization of block-accepting methods is deprecated (@flash-gordon)"
- version: 0.6.0
  summary:
  date: 2021-06-03
  fixed:
  - "[memoizable] works with MRI 2.7+ keyword arguments now (@oleander)"
  added:
  - "[memoizable] support for `BasicObject` (@oleander)"
  - "[memoizable] support for methods that accept blocks (@oleander)"
  - "[deprecations] allow printing frame info on warn when setting up Deprecation module (via #52)
    (@waiting-for-dev)"
  changed:
- version: 0.5.0
  summary:
  date: '2012-12-12'
  fixed:
  added:
  - dry-equalizer has been imported into dry-core as `Dry::Core::Equalizer` but the
    interface remains the same, which is `include Dry.Equalizer(...)` - we'll be porting
    all other gems that depend on dry-equalizer to the latest dry-core with equalizer
    included *gradually*. Eventually dry-equalizer usage will be gone completely in
    rom-rb/dry-rb/hanami projects (@solnic)
  changed:
- version: 0.4.10
  date: '2020-11-19'
  added:
  - |-
    `ClassAttributes.defines` gets a new option for coercing values (tallica)
    ```ruby
    class Builder
      extend Dry::Core::ClassAttributes

      defines :nodes, coerce: -> value { Integer(value) }
    end
    ```
    `:coerce` works with any callable as well as types from dry-types
    ```ruby
    defines :nodes, coerce: Dry::Types['coercible.integer']
    ```
  - "`Constants::IDENTITY` which is the identity function (flash-gordon)"
- version: 0.4.9
  date: '2019-08-09'
  added:
  - |-
    `Undefined.coalesce` takes a variable number of arguments and returns the first non-`Undefined` value (flash-gordon)

      ```ruby
      Undefined.coalesce(Undefined, Undefined, :foo) # => :foo
      ```
  fixed:
  - "`Undefined.{dup,clone}` returns `Undefined` back, `Undefined` is a singleton
    (flash-gordon)"
- version: 0.4.8
  date: '2019-06-23'
  added:
  - |-
    `Undefined.map` for mapping non-undefined values (flash-gordon)

      ```ruby
      something = 1
      Undefined.map(something) { |v| v + 1 } # => 2

      something = Undefined
      Undefined.map(something) { |v| v + 1 } # => Undefined
      ```
- version: 0.4.7
  date: '2018-06-25'
  fixed:
  - Fix default logger for deprecations, it now uses `$stderr` by default, as it should
    (flash-gordon)
- version: 0.4.6
  date: '2018-05-15'
  changed:
  - Trigger constant autoloading in the class builder (radar)
- version: 0.4.5
  date: '2018-03-14'
  added:
  - "`Dry::Core::Memoizable`, which provides a `memoize` macro for memoizing results
    of instance methods (timriley)"
- version: 0.4.4
  date: '2018-02-10'
  added:
  - "`deprecate_constant` overrides `Module#deprecate_constant` and issues a labeled
    message on accessing a deprecated constant (flash-gordon)"
  - "`Undefined.default` which accepts two arguments and returns the first if it's
    not `Undefined`; otherwise, returns the second one or yields a block (flash-gordon)"
- version: 0.4.3
  date: '2018-02-03'
  added:
  - "`Dry::Core::DescendantsTracker` which is a maintained version of the [`descendants_tracker`](https://github.com/dkubb/descendants_tracker)
    gem (flash-gordon)"
- version: 0.4.2
  date: '2017-12-16'
  fixed:
  - Class attributes now support private setters/getters (flash-gordon)
- version: 0.4.1
  date: '2017-11-04'
  changed:
  - Improved error message on invalid attribute value (GustavoCaso)
- version: 0.4.0
  date: '2017-11-02'
  added:
  - |-
    Added the `:type` option to class attributes, you can now restrict attribute values with a type. You can either use plain ruby types (`Integer`, `String`, etc) or `dry-types` (GustavoCaso)

      ```ruby
      class Foo
        extend Dry::Core::ClassAttributes

        defines :ruby_attr, type: Integer
        defines :dry_attr, type: Dry::Types['strict.int']
      end
      ```
- version: 0.3.4
  date: '2017-09-29'
  fixed:
  - "`Deprecations` output is set to `$stderr` by default now (solnic)"
- version: 0.3.3
  date: '2017-08-31'
  fixed:
  - The Deprecations module now shows the right caller line (flash-gordon)
- version: 0.3.2
  date: '2017-08-31'
  added:
  - Accept an existing logger object in `Dry::Core::Deprecations.set_logger!` (flash-gordon)
- version: 0.3.1
  date: '2017-05-27'
  added:
  - Support for building classes within an existing namespace (flash-gordon)
- version: 0.3.0
  date: '2017-05-05'
  changed:
  - Class attributes are initialized _before_ running the `inherited` hook. It's slightly
    more convenient behavior and it's very unlikely anyone will be affected by this,
    but technically this is a breaking change (flash-gordon)
- version: 0.2.4
  date: '2017-01-26'
  fixed:
  - Do not require deprecated method to be defined (flash-gordon)
- version: 0.2.3
  date: '2016-12-30'
  fixed:
  - Fix warnings on using uninitialized class attributes (flash-gordon)
- version: 0.2.2
  date: '2016-12-30'
  added:
  - "`ClassAttributes` which provides `defines` method for defining get-or-set methods
    (flash-gordon)"
- version: 0.2.1
  date: '2016-11-18'
  added:
  - "`Constants` are now available in nested scopes (flash-gordon)"
- version: 0.2.0
  date: '2016-11-01'
- version: 0.1.0
  date: '2016-09-17'
  summary: Initial release
