Changelog

All notable changes to this project will be documented in this file, which follows a format inspired by Keep a Changelog.

This project adheres to Semantic Versioning.

Unreleased

Gem enhancements: none

No breaking changes!

Project enhancements: none

v1.8.0 - 2023-10-25

Gem enhancements:

  • In Ruby3.2+, for singleton classes, use #attached_object instead of ObjectSpace [#318]

No breaking changes!

Project enhancements:

  • Switched RuboCop configuration from panolint to panolint-ruby [#312]
  • Updated benchmark results in README.md to Ruby 3.2.2 and 2.7.8 [#313]
  • Updated Dry::Core gem version to 1.0.0 in benchmarks [#297]
  • Updated Memery gem version to 1.5.0 in benchmarks [#313]
  • Updated Memoized gem version to 1.1.1 in benchmarks [#288]
  • Reorganized CHANGELOG.md for improved clarity and completeness [#282]

v1.7.0 - 2022-04-04

Gem enhancements:

  • Optimized memoized lookups for methods with multiple required arguments [#276]

No breaking changes!

Project enhancements:

  • Added benchmarking against GitHub main branch to CI [#274]

v1.6.0 - 2022-01-24

Gem enhancements:

  • Fixed a bug relating to inheritance of classes which include a module which prepends MemoWise [#262]

No breaking changes!

Project enhancements:

  • Update official test coverage to support Ruby 3.1 [#263]

v1.5.0 - 2021-12-17

Gem enhancements:

  • Removed thread-unsafe optimization which optimized for returning "truthy" results [#255]
  • Switched to a simpler internal data structure to fix several classes of bugs related to inheritance that the previous few versions were unable to sufficiently address [#250]

No breaking changes!

Project enhancements:

  • Expanded thread-safety testing [#254]

v1.4.0 - 2021-12-10

Gem enhancements:

  • Fixed several bugs related to classes inheriting memoized methods from multiple modules or a parent class [#241]

No breaking changes!

Project enhancements:

  • Added TruffleRuby tests to CI [#237]

v1.3.0 - 2021-11-22

Gem enhancements:

  • Fixed thread-safety issue in concurrent calls to a zero-arg method in an unmemoized state (which resulted in a nil value being incorrectly returned in one thread) [#230]
  • Fixed bugs related to child classes inheriting from parent classes that use MemoWise [#229]

No breaking changes!

Project enhancements:

  • Added thread-safety test [#225]

v1.2.0 - 2021-11-10

Gem enhancements:

  • Optimized memoized lookups for all methods by using an outer array instead of a hash [#211, #210, #219]
  • Removed an internal optimization using #hash due to the potential of hash collisions [#219]
  • Changed internal local variable names to avoid name collisions with memoized method arguments [#221]

No breaking changes!

Project enhancements:

  • Added nuance to benchmarks [#214]
  • Significantly sped up tests [#206]

v1.1.0 - 2021-07-29

Gem enhancements:

  • Fixed buggy behavior in module singleton classes and modules extended by other classes [#185]
  • Optimized memoized lookups in many cases, using a variety of optimizations [#189]

No breaking changes!

Project enhancements:

  • Added the dry-core gem to benchmarks [#187]

v1.0.0 - 2021-06-24

Gem enhancements:

  • Class methods are now supported by #preset_memo_wise and #reset_memo_wise [#134, #145]
  • Optimized memoized lookups in many cases [#143]
  • Implemented .instance_method to proxy original method parameters [#163]

No breaking changes!

Project enhancements: none

v0.4.0 - 2021-04-30

Gem enhancements:

  • Methods on objects that are serialized/deserialized with Marshal can now be memoized [#138]
  • Classes with keyword arguments in #initialize can now support memoization [#125]

No breaking changes!

Project enhancements:

v0.3.0 - 2021-02-11

Gem enhancements:

  • Class methods can now be memoized [#83]
  • Instance methods on objects created with Class#allocate can now be memoized [#99]
  • Fixed #reset_memo_wise for private methods [#111]

No breaking changes!

Project enhancements:

  • Added the project logo [#81]
  • Added CHANGELOG.md and version tags [#78]
  • Documented release procedure in README.md [#114]
  • Updated CI testing and benchmarks for Ruby 3.0 [#101]

v0.2.0 - 2020-10-28

Gem enhancements:

  • Added #preset_memo_wise to preset memoization values [#30]

Breaking changes:

  • Removed #reset_all_memo_wise (use #reset_memo_wise instead) [#52]

Project enhancements:

  • YARD docs are now generated [#52, #55, #57]
  • 100% code coverage is now enforced [#62]

v0.1.2 - 2020-10-01

Gem enhancements:

  • Optimized memoized lookups with internal data structure and method signature changes [#28, #32]

No breaking changes!

Project enhancements:

  • Tests now assert that memoization works with the Values gem [#46]
  • Added README.md badges for tests, docs, and RubyGems [#47]

v0.1.1 - 2020-08-03

Gem enhancements:

  • #reset_memo_wise can now reset memoization for specific method arguments [#20]

No breaking changes!

Project enhancements:

  • Added benchmarks to compare MemoWise to other Ruby memoization gems [#13]

v0.1.0 - 2020-07-20

Gem enhancements:

  • Added #memo_wise, which enables method memoization [#4]
  • Added #reset_memo_wise and #reset_all_memo_wise, which reset memoization [#4]

No breaking changes!

Project enhancements: none

v0.0.1 - 2020-06-29

This version does not provide memoization functionality; it simply includes project scaffolding.