memo_wise 0.3.0 → 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: a1b98d394deb079784021cd44f5c7b41abdbf1cce2b0ce14b0a3957b12bfdabe
4
- data.tar.gz: 45b6796cf708b5401a56edfd68156587f92826a71d833b7fe3bec24985d81ac9
3
+ metadata.gz: 3a2fbbb2a403502d6a492068a9a0c8c103f717ea5b32e5029ba1a0aebab61db6
4
+ data.tar.gz: c2c8118caa1621670b6cd666f92147eb5c3f069c7b910062ed0f635568764dd7
5
5
  SHA512:
6
- metadata.gz: 9ba145822aef3d07b2385daffaef15c22f5ffd4604e68d1fbad5d2bdf682c7723bb9a109cdda69d26efd6e5c05a21c1f0310ae70a1dbfd0f18a28cbe92d13d6f
7
- data.tar.gz: 210c34c42f11e9d761c0fda0512daf62a533ec0fe2f19609a6cf0e052a1f2e2fdf22a55711764865616a319e387bff83fc5a6505973a4d89483ef383af008d13
6
+ metadata.gz: 699415e3445e60bf6037fdb6887a064a4d082159be15c8c52a0711be5b3b233e3a7caa974f6d31df769d9bd0c3825d7a9f11b17b1e3b98ec9202ee8224801204
7
+ data.tar.gz: f6f377da39902d30310e7304e0caa7195e372c5fe0666e05ea30d2c2f936f3cc7d00c3588e453d5ab4ba7393a4f747f5c328acd4f4024cfa126ecb5f683fd24c
data/.dokaz ADDED
@@ -0,0 +1,2 @@
1
+ README.md
2
+ --require ./spec/dokaz_helpers.rb
@@ -1,4 +1,4 @@
1
1
  **Before merging:**
2
2
 
3
- - [ ] Copy the latest benchmark results into the `README.md` and update this PR
4
- - [ ] If this change merits an update to `CHANGELOG.md`, add an entry following Keep a Changelog [guidelines](https://keepachangelog.com/en/1.0.0/) with [semantic versioning](https://semver.org/)
3
+ - [ ] Copy the table printed at the end of the latest benchmark results into the `README.md` and update this PR
4
+ - [ ] If this change merits an update to `CHANGELOG.md`, add an entry following Keep a Changelog [guidelines](https://keepachangelog.com/en/1.0.0/) with [semantic versioning](https://semver.org/)
@@ -0,0 +1,20 @@
1
+ version: 2
2
+
3
+ updates:
4
+ # Maintain dependencies for Ruby's Bundler
5
+ - package-ecosystem: bundler
6
+ directory: "/"
7
+ schedule:
8
+ interval: daily
9
+
10
+ # Maintain dependencies for Ruby's Bundler (for Benchmarks!)
11
+ - package-ecosystem: bundler
12
+ directory: "/benchmarks"
13
+ schedule:
14
+ interval: daily
15
+
16
+ # Maintain dependencies for GitHub Actions
17
+ - package-ecosystem: "github-actions"
18
+ directory: "/"
19
+ schedule:
20
+ interval: "daily"
@@ -15,26 +15,34 @@ jobs:
15
15
  ruby: [jruby, 2.4, 2.5, 2.6, 2.7, 3.0]
16
16
  runs-on: ubuntu-latest
17
17
  steps:
18
- - uses: actions/checkout@main
18
+ - uses: actions/checkout@v2
19
+
20
+ # Conditionally configure bundler via environment variables as advised
21
+ # * https://github.com/ruby/setup-ruby#bundle-config
22
+ - name: Set bundler environment variables
23
+ run: |
24
+ echo "BUNDLE_WITHOUT=checks:docs" >> $GITHUB_ENV
25
+ if: matrix.ruby != 3.0
26
+
27
+ # Use 'bundler-cache: true' instead of actions/cache as advised:
28
+ # * https://github.com/actions/cache/blob/main/examples.md#ruby---bundler
19
29
  - uses: ruby/setup-ruby@v1
20
30
  with:
21
31
  ruby-version: ${{ matrix.ruby }}
22
- - uses: actions/cache@v1
23
- with:
24
- path: vendor/bundle
25
- key: ${{ runner.os }}-gems-${{ hashFiles('**/Gemfile.lock') }}
26
- restore-keys: |
27
- ${{ runner.os }}-gems-
28
- - run: bundle config path vendor/bundle
29
- - run: bundle config set without 'checks:docs'
30
- if: matrix.ruby != 3.0
31
- - run: bundle install --jobs 4 --retry 3
32
+ bundler-cache: true
33
+
32
34
  - run: bundle exec rspec
35
+
33
36
  - run: bundle exec rubocop
34
37
  if: matrix.ruby == 3.0
35
- - run: bundle exec yard doctest
36
- if: matrix.ruby == 3.0
38
+
37
39
  - run: |
40
+ bundle exec yard doctest
41
+ bundle exec dokaz
42
+ if: matrix.ruby == 3.0
43
+
44
+ - name: Run benchmarks on Ruby 2.7 or 3.0
45
+ run: |
38
46
  BUNDLE_GEMFILE=benchmarks/Gemfile bundle install --jobs 4 --retry 3
39
47
  BUNDLE_GEMFILE=benchmarks/Gemfile bundle exec ruby benchmarks/benchmarks.rb
40
48
  if: matrix.ruby == '2.7' || matrix.ruby == '3.0'
data/.gitignore CHANGED
@@ -1,5 +1,6 @@
1
1
  /.bundle/
2
2
  /benchmarks/.bundle/
3
+ /benchmarks/Gemfile.lock
3
4
  /.yardoc
4
5
  /_yardoc/
5
6
  /coverage/
data/.rubocop.yml CHANGED
@@ -1,2 +1,17 @@
1
1
  inherit_gem:
2
2
  panolint: rubocop.yml
3
+
4
+ Layout/LineLength:
5
+ Max: 120
6
+
7
+ Metrics/ModuleLength:
8
+ Enabled: false
9
+
10
+ Metrics/PerceivedComplexity:
11
+ Enabled: false
12
+
13
+ Style/DocumentDynamicEvalDefinition:
14
+ Enabled: false
15
+
16
+ Style/MultipleComparison:
17
+ Enabled: false
data/CHANGELOG.md CHANGED
@@ -5,8 +5,53 @@ All notable changes to this project will be documented in this file.
5
5
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
6
6
  and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
7
 
8
- ## [Unreleased]
9
- (nothing yet!)
8
+ ## Unreleased
9
+ - Nothing yet!
10
+
11
+ ## [1.2.0] - 2021-11-10
12
+
13
+ ### Updated
14
+ - Improved performance of all methods by using an outer Array instead of a Hash
15
+ - Improved performance for multi-argument methods and simplify internal data
16
+ structures
17
+
18
+ ### Fixed
19
+ - Removed use of #hash due to potential of hash collisions
20
+ - Updated internal local variable names to avoid name collisions with method
21
+ arguments
22
+
23
+ ### Breaking Changes
24
+ - None
25
+
26
+ ## [1.1.0] - 2021-07-29
27
+ ### Updated
28
+ - Improved performance across the board by:
29
+ - removing `Hash#fetch`
30
+ - using `Array#hash`
31
+ - avoiding multi-layer hash lookups for multi-argument methods
32
+ - optimizing for truthy results
33
+ - Add `dry-core` to benchmarks in README
34
+
35
+ ### Fixed
36
+ - Fixed usage on module singleton classes
37
+ - Fixed usage on module which would be extended by other classes
38
+
39
+ ### Breaking Changes
40
+ - None
41
+
42
+ ## [1.0.0] - 2021-06-24
43
+ ### Added
44
+ - Support for `.preset_memo_wise` on class methods
45
+ - Support for `.reset_memo_wise` on class methods
46
+
47
+ ### Updated
48
+ - Improved performance for common cases by reducing array allocations
49
+
50
+ ## [0.4.0] - 2021-04-30
51
+ ### Added
52
+ - Documentation of confusing module test behavior
53
+ - Support using MemoWise in classes with keyword arguments in the initializer
54
+ - Support Marshal dump/load of classes using MemoWise
10
55
 
11
56
  ## [0.3.0] - 2021-02-11
12
57
  ### Added
@@ -48,7 +93,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
48
93
  - Panolint
49
94
  - Dependabot setup
50
95
 
51
- [Unreleased]: https://github.com/panorama-ed/memo_wise/compare/v0.3.0...HEAD
96
+ [Unreleased]: https://github.com/panorama-ed/memo_wise/compare/v1.1.0...HEAD
97
+ [1.1.0]: https://github.com/panorama-ed/memo_wise/compare/v1.0.0...v1.1.0
98
+ [1.0.0]: https://github.com/panorama-ed/memo_wise/compare/v0.4.0...v1.0.0
99
+ [0.4.0]: https://github.com/panorama-ed/memo_wise/compare/v0.3.0...v0.4.0
52
100
  [0.3.0]: https://github.com/panorama-ed/memo_wise/compare/v0.2.0...v0.3.0
53
101
  [0.2.0]: https://github.com/panorama-ed/memo_wise/compare/v0.1.2...v0.2.0
54
102
  [0.1.2]: https://github.com/panorama-ed/memo_wise/compare/v0.1.1...v0.1.2
data/Gemfile CHANGED
@@ -14,11 +14,12 @@ end
14
14
  # Excluded from CI except on latest MRI Ruby, to reduce compatibility burden
15
15
  group :checks do
16
16
  gem "codecov"
17
- gem "panolint", github: "panorama-ed/panolint"
17
+ gem "panolint", github: "panorama-ed/panolint", branch: "main"
18
18
  end
19
19
 
20
20
  # Excluded from CI except on latest MRI Ruby, to reduce compatibility burden
21
21
  group :docs do
22
+ gem "dokaz"
22
23
  gem "redcarpet", "~> 3.5"
23
24
  gem "yard", "~> 0.9"
24
25
  gem "yard-doctest", "~> 0.1"
data/Gemfile.lock CHANGED
@@ -1,8 +1,9 @@
1
1
  GIT
2
2
  remote: https://github.com/panorama-ed/panolint.git
3
- revision: ca5edaa1f6985e2812998a937229f972c07bce56
3
+ revision: c709ebcc5fd9593db959df4a92c12cae1d1fb9af
4
+ branch: main
4
5
  specs:
5
- panolint (0.1.2)
6
+ panolint (0.1.3)
6
7
  brakeman (>= 4.8, < 6.0)
7
8
  rubocop (>= 0.83, < 2.0)
8
9
  rubocop-performance (~> 1.5)
@@ -13,35 +14,41 @@ GIT
13
14
  PATH
14
15
  remote: .
15
16
  specs:
16
- memo_wise (0.3.0)
17
+ memo_wise (1.2.0)
17
18
 
18
19
  GEM
19
20
  remote: https://rubygems.org/
20
21
  specs:
21
- activesupport (5.2.4.4)
22
+ activesupport (5.2.6)
22
23
  concurrent-ruby (~> 1.0, >= 1.0.2)
23
24
  i18n (>= 0.7, < 2)
24
25
  minitest (~> 5.1)
25
26
  tzinfo (~> 1.1)
27
+ ansi (1.5.0)
26
28
  ast (2.4.2)
27
- brakeman (5.0.0)
28
- codecov (0.4.3)
29
+ brakeman (5.1.1)
30
+ codecov (0.6.0)
29
31
  simplecov (>= 0.15, < 0.22)
30
- concurrent-ruby (1.1.8)
32
+ concurrent-ruby (1.1.9)
31
33
  diff-lcs (1.4.4)
32
34
  docile (1.3.5)
33
- i18n (1.8.8)
35
+ dokaz (0.0.4)
36
+ ansi
37
+ rouge
38
+ slop (~> 3)
39
+ i18n (1.8.10)
34
40
  concurrent-ruby (~> 1.0)
35
- minitest (5.14.3)
41
+ minitest (5.14.4)
36
42
  parallel (1.20.1)
37
- parser (3.0.0.0)
43
+ parser (3.0.2.0)
38
44
  ast (~> 2.4.1)
39
45
  rack (2.2.3)
40
46
  rainbow (3.0.0)
41
- rake (13.0.3)
47
+ rake (13.0.6)
42
48
  redcarpet (3.5.1)
43
- regexp_parser (2.0.3)
44
- rexml (3.2.4)
49
+ regexp_parser (2.1.1)
50
+ rexml (3.2.5)
51
+ rouge (3.26.0)
45
52
  rspec (3.10.0)
46
53
  rspec-core (~> 3.10.0)
47
54
  rspec-expectations (~> 3.10.0)
@@ -55,7 +62,7 @@ GEM
55
62
  diff-lcs (>= 1.2.0, < 2.0)
56
63
  rspec-support (~> 3.10.0)
57
64
  rspec-support (3.10.0)
58
- rubocop (1.9.1)
65
+ rubocop (1.12.1)
59
66
  parallel (~> 1.10)
60
67
  parser (>= 3.0.0.0)
61
68
  rainbow (>= 2.2.2, < 4.0)
@@ -66,7 +73,7 @@ GEM
66
73
  unicode-display_width (>= 1.4.0, < 3.0)
67
74
  rubocop-ast (1.4.1)
68
75
  parser (>= 2.7.1.5)
69
- rubocop-performance (1.9.2)
76
+ rubocop-performance (1.10.2)
70
77
  rubocop (>= 0.90.0, < 2.0)
71
78
  rubocop-ast (>= 0.4.0)
72
79
  rubocop-rails (2.9.1)
@@ -83,6 +90,7 @@ GEM
83
90
  docile (~> 1.1)
84
91
  simplecov-html (~> 0.11)
85
92
  simplecov-html (0.12.3)
93
+ slop (3.6.0)
86
94
  thread_safe (0.3.6)
87
95
  tzinfo (1.2.9)
88
96
  thread_safe (~> 0.1)
@@ -98,6 +106,7 @@ PLATFORMS
98
106
 
99
107
  DEPENDENCIES
100
108
  codecov
109
+ dokaz
101
110
  memo_wise!
102
111
  panolint!
103
112
  rake
@@ -108,4 +117,4 @@ DEPENDENCIES
108
117
  yard-doctest (~> 0.1)
109
118
 
110
119
  BUNDLED WITH
111
- 2.2.3
120
+ 2.2.28
data/LICENSE.txt CHANGED
@@ -1,6 +1,6 @@
1
1
  The MIT License (MIT)
2
2
 
3
- Copyright (c) 2020 Panorama Education
3
+ Copyright (c) 2020-2021 Panorama Education
4
4
 
5
5
  Permission is hereby granted, free of charge, to any person obtaining a copy
6
6
  of this software and associated documentation files (the "Software"), to deal
data/README.md CHANGED
@@ -12,7 +12,6 @@
12
12
  [![Gem Version](https://img.shields.io/gem/v/memo_wise.svg)](https://rubygems.org/gems/memo_wise)
13
13
  [![Gem Downloads](https://img.shields.io/gem/dt/memo_wise.svg)](https://rubygems.org/gems/memo_wise)
14
14
 
15
-
16
15
  ## Why `MemoWise`?
17
16
 
18
17
  `MemoWise` is **the wise choice for Ruby memoization**, featuring:
@@ -51,11 +50,21 @@ methods:
51
50
  ```ruby
52
51
  class Example
53
52
  prepend MemoWise
53
+
54
54
  def slow_value(x)
55
55
  sleep x
56
56
  x
57
57
  end
58
58
  memo_wise :slow_value
59
+
60
+ private
61
+
62
+ # maintains privacy of the memoized method
63
+ def private_slow_method(x)
64
+ sleep x
65
+ x
66
+ end
67
+ memo_wise :private_slow_method
59
68
  end
60
69
 
61
70
  ex = Example.new
@@ -72,29 +81,68 @@ ex.slow_value(3) # => 4 # Returns immediately because the result is memoized
72
81
  ex.reset_memo_wise # Resets all memoized results for all methods on ex
73
82
  ```
74
83
 
75
- Methods which take implicit or explicit block arguments cannot be memoized.
84
+ The same three methods are exposed for class methods as well:
76
85
 
77
- For more usage details, see our detailed [documentation](#documentation).
86
+ ```ruby
87
+ class Example
88
+ prepend MemoWise
78
89
 
79
- ## Benchmarks
90
+ def self.class_slow_value(x)
91
+ sleep x
92
+ x
93
+ end
94
+ memo_wise self: :class_slow_value
95
+ end
80
96
 
81
- Benchmarks measure memoized value retrieval time using
82
- [`benchmark-ips`](https://github.com/evanphx/benchmark-ips). All benchmarks are
83
- run on Ruby 3.0.0, except as indicated below for specific gems. Benchmarks are
84
- run in GitHub Actions and updated in every PR that changes code.
97
+ Example.class_slow_value(2) # => 2 # Sleeps for 2 seconds before returning
98
+ Example.class_slow_value(2) # => 2 # Returns immediately because the result is memoized
85
99
 
86
- |Method arguments|**`memo_wise` (0.1.0)**|`memery` (1.3.0)|`memoist`\* (0.16.2)|`memoized`\* (1.0.2)|`memoizer`\* (1.0.3)|
87
- |--|--|--|--|--|--|
88
- |`()` (none)|**baseline**|14.69x slower|2.59x slower|1.15x slower|2.91x slower|
89
- |`(a, b)`|**baseline**|1.93x slower|2.20x slower|1.79x slower|1.96x slower|
90
- |`(a:, b:)`|**baseline**|3.01x slower|2.41x slower|2.18x slower|2.28x slower|
91
- |`(a, b:)`|**baseline**|1.49x slower|1.75x slower|1.51x slower|1.60x slower|
92
- |`(a, *args)`|**baseline**|1.92x slower|2.23x slower|1.94x slower|1.98x slower|
93
- |`(a:, **kwargs)`|**baseline**|3.08x slower|2.48x slower|2.17x slower|2.28x slower|
94
- |`(a, *args, b:, **kwargs)`|**baseline**|1.55x slower|1.73x slower|1.65x slower|1.67x slower|
100
+ Example.reset_memo_wise(:class_slow_value) # Resets all memoized results for class_slow_value
95
101
 
96
- _\*Indicates a benchmark run on Ruby 2.7.2 because the gem raises errors in Ruby
97
- 3.0.0 due to its incorrect handling of keyword arguments._
102
+ Example.preset_memo_wise(:class_slow_value, 3) { 4 } # Store 4 as the result for slow_value(3)
103
+ Example.class_slow_value(3) # => 4 # Returns immediately because the result is memoized
104
+ Example.reset_memo_wise # Resets all memoized results for all methods on class
105
+ ```
106
+
107
+ **NOTE:** Methods which take implicit or explicit block arguments cannot be
108
+ memoized.
109
+
110
+ For more usage details, see our detailed [documentation](#documentation).
111
+
112
+ ## Benchmarks
113
+
114
+ Benchmarks are run in GitHub Actions, and the tables below are updated with every code change. **Values >1.00x represent how much _slower_ each gem’s memoized value retrieval is than the latest commit of `MemoWise`**, according to [`benchmark-ips`](https://github.com/evanphx/benchmark-ips) (2.9.1).
115
+
116
+ Results using Ruby 3.0.2:
117
+
118
+ |Method arguments|`Dry::Core`\* (0.7.1)|`Memery` (1.4.0)|
119
+ |--|--|--|
120
+ |`()` (none)|1.51x|19.82x|
121
+ |`(a)`|2.30x|11.38x|
122
+ |`(a, b)`|0.45x|2.10x|
123
+ |`(a:)`|2.20x|22.83x|
124
+ |`(a:, b:)`|0.49x|4.53x|
125
+ |`(a, b:)`|0.46x|4.35x|
126
+ |`(a, *args)`|0.89x|2.03x|
127
+ |`(a:, **kwargs)`|0.82x|3.18x|
128
+ |`(a, *args, b:, **kwargs)`|0.60x|1.62x|
129
+
130
+ \* `Dry::Core`
131
+ [may cause incorrect behavior caused by hash collisions](https://github.com/dry-rb/dry-core/issues/63).
132
+
133
+ Results using Ruby 2.7.4 (because these gems raise errors in Ruby 3.x):
134
+
135
+ |Method arguments|`DDMemoize` (1.0.0)|`Memoist` (0.16.2)|`Memoized` (1.0.2)|`Memoizer` (1.0.3)|
136
+ |--|--|--|--|--|
137
+ |`()` (none)|35.29x|3.46x|1.67x|4.27x|
138
+ |`(a)`|25.04x|16.96x|12.83x|14.68x|
139
+ |`(a, b)`|3.20x|2.28x|1.84x|2.04x|
140
+ |`(a:)`|34.17x|27.77x|24.07x|25.39x|
141
+ |`(a:, b:)`|5.22x|4.29x|3.74x|4.00x|
142
+ |`(a, b:)`|4.81x|3.99x|3.49x|3.66x|
143
+ |`(a, *args)`|3.21x|2.30x|1.97x|2.00x|
144
+ |`(a:, **kwargs)`|2.84x|2.39x|2.12x|2.19x|
145
+ |`(a, *args, b:, **kwargs)`|2.10x|1.80x|1.67x|1.66x|
98
146
 
99
147
  You can run benchmarks yourself with:
100
148
 
@@ -107,18 +155,6 @@ $ bundle exec ruby benchmarks.rb
107
155
  If your results differ from what's posted here,
108
156
  [let us know](https://github.com/panorama-ed/memo_wise/issues/new)!
109
157
 
110
- ## Development
111
-
112
- After checking out the repo, run `bin/setup` to install dependencies. Then, run
113
- `rake spec` to run the tests. You can also run `bin/console` for an interactive
114
- prompt that will allow you to experiment.
115
-
116
- To install this gem onto your local machine, run `bundle exec rake install`. To
117
- release a new version, update the version number in `version.rb`, and then run
118
- `bundle exec rake release`, which will create a git tag for the version, push
119
- git commits and tags, and push the `.gem` file to
120
- [rubygems.org](https://rubygems.org).
121
-
122
158
  ## Documentation
123
159
 
124
160
  ### Documentation is Automatically Generated
@@ -141,6 +177,41 @@ code examples in our YARD documentation. To run `doctest` locally:
141
177
  bundle exec yard doctest
142
178
  ```
143
179
 
180
+ We use [dokaz](https://github.com/zverok/dokaz) to test all code examples in
181
+ this README.md file, and all other non-code documentation. To run `dokaz`
182
+ locally:
183
+
184
+ ```bash
185
+ bundle exec dokaz
186
+ ```
187
+
188
+ ### A Note on Testing
189
+
190
+ When testing memoized *module* methods, note that some testing setups will
191
+ reuse the same instance (which `include`s/`extend`s/`prepend`s the module)
192
+ across tests, which can result in confusing test failures when this differs from
193
+ how you use the code in production.
194
+
195
+ For example, Rails view helpers are modules that are commonly tested with a
196
+ [shared `view` instance](https://github.com/rails/rails/blob/291a3d2ef29a3842d1156ada7526f4ee60dd2b59/actionview/lib/action_view/test_case.rb#L203-L214). Rails initializes a new view instance for each web request so any view helper
197
+ methods would only be memoized for the duration of that web request, but in
198
+ tests (such as when using
199
+ [`rspec-rails`'s `helper`](https://github.com/rspec/rspec-rails/blob/main/lib/rspec/rails/example/helper_example_group.rb#L22-L27)),
200
+ the memoization may persist across tests. In this case, simply reset the
201
+ memoization between your tests with something like:
202
+
203
+ ```ruby
204
+ after(:each) { helper.reset_memo_wise }
205
+ ```
206
+
207
+ ## Further Reading
208
+
209
+ We've written more about MemoWise in a series of blog posts:
210
+
211
+ - [Introducing: MemoWise](https://medium.com/building-panorama-education/introducing-memowise-51a5f0523489)
212
+ - [Optimizing MemoWise Performance](https://ja.cob.land/optimizing-memowise-performance)
213
+ - [Esosteric Ruby in MemoWise](https://jemma.dev/blog/esoteric-ruby-in-memowise)
214
+
144
215
  ## Logo
145
216
 
146
217
  `MemoWise`'s logo was created by [Luci Cooke](https://www.lucicooke.com/). The
@@ -162,7 +233,7 @@ To make a new release of `MemoWise` to
162
233
  dependencies (e.g. `rake`) as follows:
163
234
 
164
235
  ```shell
165
- bundle config set --local with 'release'
236
+ bundle config --local with 'release'
166
237
  bundle install
167
238
  ```
168
239
 
data/benchmarks/Gemfile CHANGED
@@ -2,13 +2,15 @@
2
2
 
3
3
  source "https://rubygems.org"
4
4
 
5
- ruby ">= 2.7.2"
5
+ ruby ">= 2.7.4"
6
6
 
7
- gem "benchmark-ips", "2.8.4"
7
+ gem "benchmark-ips", "2.9.1"
8
8
 
9
9
  if RUBY_VERSION > "3"
10
- gem "memery", "1.3.0"
10
+ gem "dry-core", "0.7.1"
11
+ gem "memery", "1.4.0"
11
12
  else
13
+ gem "ddmemoize", "1.0.0"
12
14
  gem "memoist", "0.16.2"
13
15
  gem "memoized", "1.0.2"
14
16
  gem "memoizer", "1.0.3"