memo_wise 1.7.0 → 1.11.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.
@@ -126,18 +126,7 @@ module MemoWise
126
126
  def self.original_class_from_singleton(klass)
127
127
  raise ArgumentError, "Must be a singleton class: #{klass.inspect}" unless klass.singleton_class?
128
128
 
129
- # Since we call this method a lot, we memoize the results. This can have a
130
- # huge impact; for example, in our test suite this drops our test times
131
- # from over five minutes to just a few seconds.
132
- @original_class_from_singleton ||= {}
133
-
134
- # Search ObjectSpace
135
- # * 1:1 relationship of singleton class to original class is documented
136
- # * Performance concern: searches all Class objects
137
- # But, only runs at load time and results are memoized
138
- @original_class_from_singleton[klass] ||= ObjectSpace.each_object(Module).find do |cls|
139
- cls.singleton_class == klass
140
- end
129
+ find_attached_object(klass)
141
130
  end
142
131
 
143
132
  # Convention we use for renaming the original method when we replace with
@@ -199,7 +188,7 @@ module MemoWise
199
188
  # The class to which we are prepending MemoWise to provide memoization.
200
189
  # @return [Class] where we look for method definitions
201
190
  def self.target_class(target)
202
- if target.instance_of?(Class)
191
+ if target.instance_of?(Class) || target.instance_of?(Module)
203
192
  # A class's methods are defined in its singleton class
204
193
  target.singleton_class
205
194
  else
@@ -208,5 +197,42 @@ module MemoWise
208
197
  end
209
198
  end
210
199
  private_class_method :target_class
200
+
201
+ if Module.singleton_class.respond_to?(:attached_object)
202
+ # In Ruby3.2+, for singleton classes, `#attached_object` returns the object this class is for
203
+ # https://bugs.ruby-lang.org/issues/12084
204
+ #
205
+ # @param klass [Class]
206
+ # Singleton class to find the original class of
207
+ #
208
+ # @return Class
209
+ # Original class for which `klass` is the singleton class.
210
+ def self.find_attached_object(klass)
211
+ klass.attached_object
212
+ end
213
+ else
214
+ # :nocov:
215
+ # @param klass [Class]
216
+ # Singleton class to find the original class of
217
+ #
218
+ # @return Class
219
+ # Original class for which `klass` is the singleton class.
220
+ def self.find_attached_object(klass)
221
+ # Since we call this method a lot, we memoize the results. This can have a
222
+ # huge impact; for example, in our test suite this drops our test times
223
+ # from over five minutes to just a few seconds.
224
+ @original_class_from_singleton ||= {}
225
+
226
+ # Search ObjectSpace
227
+ # * 1:1 relationship of singleton class to original class is documented
228
+ # * Performance concern: searches all Class objects
229
+ # But, only runs at load time and results are memoized
230
+ @original_class_from_singleton[klass] ||= ObjectSpace.each_object(Module).find do |cls|
231
+ cls.singleton_class == klass
232
+ end
233
+ end
234
+ # :nocov:
235
+ end
236
+ private_class_method :find_attached_object
211
237
  end
212
238
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module MemoWise
4
- VERSION = "1.7.0"
4
+ VERSION = "1.11.0"
5
5
  end
data/lib/memo_wise.rb CHANGED
@@ -1,9 +1,9 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "set"
3
+ require "set" # Ruby < 3.2 does not load `set` by default.
4
4
 
5
- require "memo_wise/internal_api"
6
- require "memo_wise/version"
5
+ require_relative "memo_wise/internal_api"
6
+ require_relative "memo_wise/version"
7
7
 
8
8
  # MemoWise is the wise choice for memoization in Ruby.
9
9
  #
@@ -30,12 +30,12 @@ module MemoWise
30
30
  # [calling the original](https://medium.com/@jeremy_96642/ruby-method-auditing-using-module-prepend-4f4e69aacd95)
31
31
  # constructor.
32
32
  #
33
- # - **Q:** Why is [Module#prepend](https://ruby-doc.org/core-3.1.0/Module.html#method-i-prepend)
33
+ # - **Q:** Why is [Module#prepend](https://ruby-doc.org/3.3.1/Module.html#method-i-prepend)
34
34
  # important here
35
35
  # ([more info](https://medium.com/@leo_hetsch/ruby-modules-include-vs-prepend-vs-extend-f09837a5b073))?
36
36
  # - **A:** To set up *mutable state* inside the instance, even if the original
37
37
  # constructor will then call
38
- # [Object#freeze](https://ruby-doc.org/core-3.1.0/Object.html#method-i-freeze).
38
+ # [Object#freeze](https://ruby-doc.org/3.3.1/Object.html#method-i-freeze).
39
39
  #
40
40
  # This approach supports memoization on frozen (immutable) objects -- for
41
41
  # example, classes created by the
@@ -77,6 +77,22 @@ module MemoWise
77
77
  end
78
78
  HEREDOC
79
79
 
80
+ module CreateMemoWiseStateOnExtended
81
+ def extended(base)
82
+ MemoWise::InternalAPI.create_memo_wise_state!(base)
83
+ super
84
+ end
85
+ end
86
+ private_constant(:CreateMemoWiseStateOnExtended)
87
+
88
+ module CreateMemoWiseStateOnInherited
89
+ def inherited(subclass)
90
+ MemoWise::InternalAPI.create_memo_wise_state!(subclass)
91
+ super
92
+ end
93
+ end
94
+ private_constant(:CreateMemoWiseStateOnInherited)
95
+
80
96
  # @private
81
97
  #
82
98
  # Private setup method, called automatically by `prepend MemoWise` in a class.
@@ -84,7 +100,7 @@ module MemoWise
84
100
  # @param target [Class]
85
101
  # The `Class` into to prepend the MemoWise methods e.g. `memo_wise`
86
102
  #
87
- # @see https://ruby-doc.org/core-3.1.0/Module.html#method-i-prepended
103
+ # @see https://ruby-doc.org/3.3.1/Module.html#method-i-prepend
88
104
  #
89
105
  # @example
90
106
  # class Example
@@ -99,7 +115,7 @@ module MemoWise
99
115
  #
100
116
  # This is necessary in addition to the `#initialize` method definition
101
117
  # above because
102
- # [`Class#allocate`](https://ruby-doc.org/core-3.1.0/Class.html#method-i-allocate)
118
+ # [`Class#allocate`](https://ruby-doc.org/3.3.1/Class.html#method-i-allocate)
103
119
  # bypasses `#initialize`, and when it's used (e.g.,
104
120
  # [in ActiveRecord](https://github.com/rails/rails/blob/a395c3a6af1e079740e7a28994d77c8baadd2a9d/activerecord/lib/active_record/persistence.rb#L411))
105
121
  # we still need to be able to access MemoWise's instance variable. Despite
@@ -135,9 +151,7 @@ module MemoWise
135
151
  #
136
152
  # On method call `@_memo_wise` would still be `nil`
137
153
  # causing error when fetching cache from `@_memo_wise`
138
- def klass.extended(base)
139
- MemoWise::InternalAPI.create_memo_wise_state!(base)
140
- end
154
+ klass.singleton_class.prepend(CreateMemoWiseStateOnExtended)
141
155
  end
142
156
  when Hash
143
157
  unless method_name_or_hash.keys == [:self]
@@ -158,12 +172,11 @@ module MemoWise
158
172
 
159
173
  # This ensures that a memoized method defined on a parent class can
160
174
  # still be used in a child class.
161
- klass.module_eval <<~HEREDOC, __FILE__, __LINE__ + 1
162
- def inherited(subclass)
163
- super
164
- MemoWise::InternalAPI.create_memo_wise_state!(subclass)
165
- end
166
- HEREDOC
175
+ if klass.is_a?(Class) && !klass.singleton_class?
176
+ klass.singleton_class.prepend(CreateMemoWiseStateOnInherited)
177
+ else
178
+ klass.prepend(CreateMemoWiseStateOnInherited)
179
+ end
167
180
 
168
181
  raise ArgumentError, "#{method_name.inspect} must be a Symbol" unless method_name.is_a?(Symbol)
169
182
 
@@ -254,7 +267,7 @@ module MemoWise
254
267
  )
255
268
  end
256
269
 
257
- # Override [Module#instance_method](https://ruby-doc.org/core-3.1.0/Module.html#method-i-instance_method)
270
+ # Override [Module#instance_method](https://ruby-doc.org/3.3.1/Module.html#method-i-instance_method)
258
271
  # to proxy the original `UnboundMethod#parameters` results. We want the
259
272
  # parameters to reflect the original method in order to support callers
260
273
  # who want to use Ruby reflection to process the method parameters,
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: memo_wise
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.7.0
4
+ version: 1.11.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Panorama Education
@@ -11,7 +11,7 @@ authors:
11
11
  autorequire:
12
12
  bindir: bin
13
13
  cert_chain: []
14
- date: 2022-04-04 00:00:00.000000000 Z
14
+ date: 2025-02-26 00:00:00.000000000 Z
15
15
  dependencies: []
16
16
  description:
17
17
  email:
@@ -23,31 +23,12 @@ executables: []
23
23
  extensions: []
24
24
  extra_rdoc_files: []
25
25
  files:
26
- - ".dokaz"
27
- - ".github/PULL_REQUEST_TEMPLATE.md"
28
- - ".github/dependabot.yml"
29
- - ".github/workflows/main.yml"
30
- - ".gitignore"
31
- - ".rspec"
32
- - ".rubocop.yml"
33
- - ".ruby-version"
34
- - ".yardopts"
35
26
  - CHANGELOG.md
36
- - CODE_OF_CONDUCT.md
37
- - Gemfile
38
- - Gemfile.lock
39
27
  - LICENSE.txt
40
28
  - README.md
41
- - Rakefile
42
- - benchmarks/Gemfile
43
- - benchmarks/benchmarks.rb
44
- - bin/console
45
- - bin/setup
46
29
  - lib/memo_wise.rb
47
30
  - lib/memo_wise/internal_api.rb
48
31
  - lib/memo_wise/version.rb
49
- - logo/logo.png
50
- - memo_wise.gemspec
51
32
  homepage: https://github.com/panorama-ed/memo_wise
52
33
  licenses:
53
34
  - MIT
@@ -63,14 +44,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
63
44
  requirements:
64
45
  - - ">="
65
46
  - !ruby/object:Gem::Version
66
- version: 2.4.0
47
+ version: 2.7.0
67
48
  required_rubygems_version: !ruby/object:Gem::Requirement
68
49
  requirements:
69
50
  - - ">="
70
51
  - !ruby/object:Gem::Version
71
52
  version: '0'
72
53
  requirements: []
73
- rubygems_version: 3.3.7
54
+ rubygems_version: 3.5.16
74
55
  signing_key:
75
56
  specification_version: 4
76
57
  summary: The wise choice for Ruby memoization
data/.dokaz DELETED
@@ -1,2 +0,0 @@
1
- README.md
2
- --require ./spec/dokaz_helpers.rb
@@ -1,4 +0,0 @@
1
- **Before merging:**
2
-
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/)
@@ -1,20 +0,0 @@
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"
@@ -1,57 +0,0 @@
1
- name: Main
2
- on:
3
- pull_request:
4
- branches:
5
- - main
6
- push:
7
- branches:
8
- - main
9
- jobs:
10
- ci:
11
- name: CI
12
- strategy:
13
- fail-fast: false
14
- matrix:
15
- # Due to https://github.com/actions/runner/issues/849, we have to use
16
- # quotes for '3.0' -- without quotes, CI sees '3' and runs the latest.
17
- ruby: [2.4, 2.5, 2.6, 2.7, '3.0', 3.1, jruby, truffleruby-head]
18
- runs-on: ubuntu-latest
19
- steps:
20
- - uses: actions/checkout@v3
21
-
22
- # Conditionally configure bundler via environment variables as advised
23
- # * https://github.com/ruby/setup-ruby#bundle-config
24
- - name: Set bundler environment variables
25
- run: |
26
- echo "BUNDLE_WITHOUT=checks:docs" >> $GITHUB_ENV
27
- if: matrix.ruby != 3.1
28
-
29
- # Use 'bundler-cache: true' instead of actions/cache as advised:
30
- # * https://github.com/actions/cache/blob/main/examples.md#ruby---bundler
31
- - uses: ruby/setup-ruby@v1
32
- with:
33
- ruby-version: ${{ matrix.ruby }}
34
- bundler-cache: true
35
-
36
- - run: bundle exec rspec
37
-
38
- - uses: codecov/codecov-action@v2
39
- with:
40
- files: ./coverage/coverage.xml
41
- fail_ci_if_error: true # optional (default = false)
42
- verbose: true # optional (default = false)
43
- if: matrix.ruby == 3.1
44
-
45
- - run: bundle exec rubocop
46
- if: matrix.ruby == 3.1
47
-
48
- - run: |
49
- bundle exec yard doctest
50
- bundle exec dokaz
51
- if: matrix.ruby == 3.1
52
-
53
- - name: Run benchmarks on Ruby 2.7 or 3.1
54
- run: |
55
- BUNDLE_GEMFILE=benchmarks/Gemfile bundle install --jobs 4 --retry 3
56
- BUNDLE_GEMFILE=benchmarks/Gemfile bundle exec ruby benchmarks/benchmarks.rb
57
- if: matrix.ruby == '2.7' || matrix.ruby == '3.1'
data/.gitignore DELETED
@@ -1,13 +0,0 @@
1
- /.bundle/
2
- /benchmarks/.bundle/
3
- /benchmarks/Gemfile.lock
4
- /.yardoc
5
- /_yardoc/
6
- /coverage/
7
- /doc/
8
- /pkg/
9
- /spec/reports/
10
- /tmp/
11
-
12
- # rspec failure tracking
13
- .rspec_status
data/.rspec DELETED
@@ -1,3 +0,0 @@
1
- --format documentation
2
- --color
3
- --require spec_helper
data/.rubocop.yml DELETED
@@ -1,17 +0,0 @@
1
- inherit_gem:
2
- panolint: 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/.ruby-version DELETED
@@ -1 +0,0 @@
1
- 3.1.0
data/.yardopts DELETED
@@ -1,8 +0,0 @@
1
- --readme README.md
2
- --title 'MemoWise Documentation'
3
- --charset utf-8
4
- --markup markdown
5
- --plugin yard-doctest
6
- --no-private
7
- 'lib/**/*.rb' - '*.md'
8
- LICENSE.txt
data/CODE_OF_CONDUCT.md DELETED
@@ -1,76 +0,0 @@
1
- # Contributor Covenant Code of Conduct
2
-
3
- ## Our Pledge
4
-
5
- In the interest of fostering an open and welcoming environment, we as
6
- contributors and maintainers pledge to making participation in our project and
7
- our community a harassment-free experience for everyone, regardless of age, body
8
- size, disability, ethnicity, gender identity and expression, level of experience,
9
- nationality, personal appearance, race, religion, or sexual identity and
10
- orientation.
11
-
12
- ## Our Standards
13
-
14
- Examples of behavior that contributes to creating a positive environment
15
- include:
16
-
17
- * Using welcoming and inclusive language
18
- * Being respectful of differing viewpoints and experiences
19
- * Gracefully accepting constructive criticism
20
- * Focusing on what is best for the community
21
- * Showing empathy towards other community members
22
-
23
- Examples of unacceptable behavior by participants include:
24
-
25
- * The use of sexualized language or imagery and unwelcome sexual attention or
26
- advances
27
- * Trolling, insulting/derogatory comments, and personal or political attacks
28
- * Public or private harassment
29
- * Publishing others' private information, such as a physical or electronic
30
- address, without explicit permission
31
- * Other conduct which could reasonably be considered inappropriate in a
32
- professional setting
33
-
34
- ## Our Responsibilities
35
-
36
- Project maintainers are responsible for clarifying the standards of acceptable
37
- behavior and are expected to take appropriate and fair corrective action in
38
- response to any instances of unacceptable behavior.
39
-
40
- Project maintainers have the right and responsibility to remove, edit, or
41
- reject comments, commits, code, wiki edits, issues, and other contributions
42
- that are not aligned to this Code of Conduct, or to ban temporarily or
43
- permanently any contributor for other behaviors that they deem inappropriate,
44
- threatening, offensive, or harmful.
45
-
46
- ## Scope
47
-
48
- This Code of Conduct applies both within project spaces and in public spaces
49
- when an individual is representing the project or its community. Examples of
50
- representing a project or community include using an official project e-mail
51
- address, posting via an official social media account, or acting as an appointed
52
- representative at an online or offline event. Representation of a project may be
53
- further defined and clarified by project maintainers.
54
-
55
- ## Enforcement
56
-
57
- Instances of abusive, harassing, or otherwise unacceptable behavior may be
58
- reported by contacting the project team at engineering@panoramaed.com. All
59
- complaints will be reviewed and investigated and will result in a response that
60
- is deemed necessary and appropriate to the circumstances. The project team is
61
- obligated to maintain confidentiality with regard to the reporter of an
62
- incident. Further details of specific enforcement policies may be posted
63
- separately.
64
-
65
- Project maintainers who do not follow or enforce the Code of Conduct in good
66
- faith may face temporary or permanent repercussions as determined by other
67
- members of the project's leadership.
68
-
69
- ## Attribution
70
-
71
- This Code of Conduct is adapted from the [Contributor Covenant][homepage],
72
- version 1.4, available at
73
- [https://contributor-covenant.org/version/1/4][version]
74
-
75
- [homepage]: https://contributor-covenant.org
76
- [version]: https://contributor-covenant.org/version/1/4/
data/Gemfile DELETED
@@ -1,36 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- source "https://rubygems.org"
4
-
5
- git_source(:github) { |repo| "https://github.com/#{repo}.git" }
6
-
7
- gemspec
8
-
9
- group :test do
10
- gem "rspec", "~> 3.11"
11
- gem "values", "~> 1"
12
- end
13
-
14
- # Excluded from CI except on latest MRI Ruby, to reduce compatibility burden
15
- group :checks do
16
- gem "panolint", github: "panorama-ed/panolint", branch: "main"
17
-
18
- # Simplecov to generate coverage info
19
- gem "simplecov", require: false
20
-
21
- # Simplecov-cobertura to generate an xml coverage file to upload to Codecov
22
- gem "simplecov-cobertura", require: false
23
- end
24
-
25
- # Excluded from CI except on latest MRI Ruby, to reduce compatibility burden
26
- group :docs do
27
- gem "dokaz"
28
- gem "redcarpet", "~> 3.5"
29
- gem "yard", "~> 0.9"
30
- gem "yard-doctest", "~> 0.1"
31
- end
32
-
33
- # Optional, only used locally to release to rubygems.org
34
- group :release, optional: true do
35
- gem "rake"
36
- end
data/Gemfile.lock DELETED
@@ -1,124 +0,0 @@
1
- GIT
2
- remote: https://github.com/panorama-ed/panolint.git
3
- revision: 32da31ae800b7e16068b6495397cd98aa04c68a3
4
- branch: main
5
- specs:
6
- panolint (0.1.4)
7
- brakeman (>= 4.8, < 6.0)
8
- rubocop (>= 0.83, < 2.0)
9
- rubocop-performance (~> 1.5)
10
- rubocop-rails (~> 2.5)
11
- rubocop-rake (~> 0.5)
12
- rubocop-rspec (~> 2.0)
13
-
14
- PATH
15
- remote: .
16
- specs:
17
- memo_wise (1.7.0)
18
-
19
- GEM
20
- remote: https://rubygems.org/
21
- specs:
22
- activesupport (7.0.2.2)
23
- concurrent-ruby (~> 1.0, >= 1.0.2)
24
- i18n (>= 1.6, < 2)
25
- minitest (>= 5.1)
26
- tzinfo (~> 2.0)
27
- ansi (1.5.0)
28
- ast (2.4.2)
29
- brakeman (5.2.1)
30
- concurrent-ruby (1.1.9)
31
- diff-lcs (1.5.0)
32
- docile (1.4.0)
33
- dokaz (0.0.4)
34
- ansi
35
- rouge
36
- slop (~> 3)
37
- i18n (1.10.0)
38
- concurrent-ruby (~> 1.0)
39
- minitest (5.15.0)
40
- parallel (1.21.0)
41
- parser (3.1.1.0)
42
- ast (~> 2.4.1)
43
- rack (2.2.3)
44
- rainbow (3.1.1)
45
- rake (13.0.6)
46
- redcarpet (3.5.1)
47
- regexp_parser (2.2.1)
48
- rexml (3.2.5)
49
- rouge (3.28.0)
50
- rspec (3.11.0)
51
- rspec-core (~> 3.11.0)
52
- rspec-expectations (~> 3.11.0)
53
- rspec-mocks (~> 3.11.0)
54
- rspec-core (3.11.0)
55
- rspec-support (~> 3.11.0)
56
- rspec-expectations (3.11.0)
57
- diff-lcs (>= 1.2.0, < 2.0)
58
- rspec-support (~> 3.11.0)
59
- rspec-mocks (3.11.0)
60
- diff-lcs (>= 1.2.0, < 2.0)
61
- rspec-support (~> 3.11.0)
62
- rspec-support (3.11.0)
63
- rubocop (1.25.1)
64
- parallel (~> 1.10)
65
- parser (>= 3.1.0.0)
66
- rainbow (>= 2.2.2, < 4.0)
67
- regexp_parser (>= 1.8, < 3.0)
68
- rexml
69
- rubocop-ast (>= 1.15.1, < 2.0)
70
- ruby-progressbar (~> 1.7)
71
- unicode-display_width (>= 1.4.0, < 3.0)
72
- rubocop-ast (1.16.0)
73
- parser (>= 3.1.1.0)
74
- rubocop-performance (1.13.2)
75
- rubocop (>= 1.7.0, < 2.0)
76
- rubocop-ast (>= 0.4.0)
77
- rubocop-rails (2.13.2)
78
- activesupport (>= 4.2.0)
79
- rack (>= 1.1)
80
- rubocop (>= 1.7.0, < 2.0)
81
- rubocop-rake (0.6.0)
82
- rubocop (~> 1.0)
83
- rubocop-rspec (2.9.0)
84
- rubocop (~> 1.19)
85
- ruby-progressbar (1.11.0)
86
- simplecov (0.21.2)
87
- docile (~> 1.1)
88
- simplecov-html (~> 0.11)
89
- simplecov_json_formatter (~> 0.1)
90
- simplecov-cobertura (2.1.0)
91
- rexml
92
- simplecov (~> 0.19)
93
- simplecov-html (0.12.3)
94
- simplecov_json_formatter (0.1.4)
95
- slop (3.6.0)
96
- tzinfo (2.0.4)
97
- concurrent-ruby (~> 1.0)
98
- unicode-display_width (2.1.0)
99
- values (1.8.0)
100
- webrick (1.7.0)
101
- yard (0.9.27)
102
- webrick (~> 1.7.0)
103
- yard-doctest (0.1.17)
104
- minitest
105
- yard
106
-
107
- PLATFORMS
108
- ruby
109
-
110
- DEPENDENCIES
111
- dokaz
112
- memo_wise!
113
- panolint!
114
- rake
115
- redcarpet (~> 3.5)
116
- rspec (~> 3.11)
117
- simplecov
118
- simplecov-cobertura
119
- values (~> 1)
120
- yard (~> 0.9)
121
- yard-doctest (~> 0.1)
122
-
123
- BUNDLED WITH
124
- 2.3.8
data/Rakefile DELETED
@@ -1,3 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require "bundler/gem_tasks"
data/benchmarks/Gemfile DELETED
@@ -1,21 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- source "https://rubygems.org"
4
-
5
- git_source(:github) { |repo| "https://github.com/#{repo}.git" }
6
-
7
- ruby ">= 2.7.5"
8
-
9
- gem "benchmark-ips", "2.10.0"
10
-
11
- if RUBY_VERSION > "3"
12
- gem "dry-core", "0.7.1"
13
- gem "memery", "1.4.0"
14
- else
15
- gem "ddmemoize", "1.0.0"
16
- gem "memoist", "0.16.2"
17
- gem "memoized", "1.0.2"
18
- gem "memoizer", "1.0.3"
19
- end
20
-
21
- gem "memo_wise", github: "panorama-ed/memo_wise", branch: "main"