memo_pad 0.1.0 → 0.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 +4 -4
- data/.rubocop.yml +6 -3
- data/CHANGELOG.md +5 -0
- data/Gemfile.lock +1 -1
- data/README.md +16 -5
- data/lib/memo_pad/memo.rb +16 -3
- data/lib/memo_pad/version.rb +1 -1
- data/lib/memo_pad.rb +2 -2
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9c11f68aeb52a2137f6151c79c374fe1416b4c6c01882b0cfffc74bf66a4cbc0
|
4
|
+
data.tar.gz: 4bce812c02f59353b89f64a6e09f21659f24dc10a63c78407a7063fdc30e59ae
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 10eb9d8596163ac3edf59a74ed1851df52c97d0bcc8b35943364d1c9bd0eda6087011ea37217cc3e029a6b60ac5e4d45e8847ae26bc9aa83742d89a5b1634dd2
|
7
|
+
data.tar.gz: 8320f2f73c565c637923657bf27dd660c785705ae53918bef50bd562e605ad150d04c5dda362131e2c6bed2b23f34c1b44116f7b2241c58fe4a19de1b7f97922
|
data/.rubocop.yml
CHANGED
@@ -6,6 +6,12 @@ AllCops:
|
|
6
6
|
TargetRubyVersion: 2.7
|
7
7
|
NewCops: enable
|
8
8
|
|
9
|
+
Layout/LineLength:
|
10
|
+
Max: 120
|
11
|
+
|
12
|
+
Metrics/BlockLength:
|
13
|
+
AllowedMethods: ["describe"]
|
14
|
+
|
9
15
|
Style/AccessModifierDeclarations:
|
10
16
|
Enabled: true
|
11
17
|
EnforcedStyle: inline
|
@@ -17,6 +23,3 @@ Style/StringLiterals:
|
|
17
23
|
Style/StringLiteralsInInterpolation:
|
18
24
|
Enabled: true
|
19
25
|
EnforcedStyle: double_quotes
|
20
|
-
|
21
|
-
Layout/LineLength:
|
22
|
-
Max: 120
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,10 @@
|
|
1
1
|
## [Unreleased]
|
2
2
|
|
3
|
+
## [0.2.0] - 2024-02-14
|
4
|
+
|
5
|
+
- **BREAKING**: Changes `MemoPad::Memo#call` to `MemoPad::Memo#fetch` to more closely match interfaces like `ActiveSupport::Cache`.
|
6
|
+
- Add `#read` and `#write` methods to allow for lower-level manipulation of the cached values, similarly inspired by the interface of `ActiveSupport::Cache`.
|
7
|
+
|
3
8
|
## [0.1.0] - 2024-01-22
|
4
9
|
|
5
10
|
- Initial release
|
data/Gemfile.lock
CHANGED
data/README.md
CHANGED
@@ -27,7 +27,7 @@ If bundler is not being used to manage dependencies, install the gem by executin
|
|
27
27
|
## Usage
|
28
28
|
|
29
29
|
1. First, `include MemoPad` in your class.
|
30
|
-
2. Then use `memo_pad.
|
30
|
+
2. Then use `memo_pad.fetch(name, *args) do; end` to memoize the result of the block.
|
31
31
|
3. There is no step 3.
|
32
32
|
|
33
33
|
```ruby
|
@@ -35,30 +35,41 @@ class Foo
|
|
35
35
|
include MemoPad
|
36
36
|
|
37
37
|
def expensive_method
|
38
|
-
memo_pad.
|
38
|
+
memo_pad.fetch(:expensive_method) do
|
39
39
|
# Do some expensive work here
|
40
40
|
end
|
41
41
|
end
|
42
42
|
|
43
43
|
def expensive_method_with_arguments(foo, bar: nil)
|
44
|
-
memo_pad.
|
44
|
+
memo_pad.fetch(:expensive_method, foo, bar) do
|
45
45
|
# Do expensive work here, respecting the values of `foo` and `bar`
|
46
46
|
end
|
47
47
|
end
|
48
48
|
|
49
49
|
def complex_memoization
|
50
|
-
first_part = memo_pad.
|
50
|
+
first_part = memo_pad.fetch(:complex_memoization_first) do
|
51
51
|
# Some independent expensive work
|
52
52
|
end
|
53
53
|
|
54
54
|
# Maybe some other unmemoized work
|
55
55
|
|
56
|
-
memo_pad.
|
56
|
+
memo_pad.fetch(:complex_memoization_second, first_part) do
|
57
57
|
# Some other expensive work, respecting the value of `first_part`
|
58
58
|
end
|
59
59
|
end
|
60
60
|
end
|
61
61
|
```
|
62
|
+
|
63
|
+
You can directly write a memo, if needed, with `#write`. It has nearly the same signature as `#fetch`, the name and optional list of arguments, with the addition of the `value:` keyword argument to supply the value to write to the memo.
|
64
|
+
|
65
|
+
```ruby
|
66
|
+
def precache_things(things)
|
67
|
+
things.each do |thing|
|
68
|
+
memo_pad.write(:has_thing?, thing, value: true)
|
69
|
+
end
|
70
|
+
end
|
71
|
+
```
|
72
|
+
|
62
73
|
## Development
|
63
74
|
|
64
75
|
After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake test` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
|
data/lib/memo_pad/memo.rb
CHANGED
@@ -11,9 +11,22 @@ module MemoPad
|
|
11
11
|
end
|
12
12
|
end
|
13
13
|
|
14
|
-
def
|
15
|
-
|
16
|
-
|
14
|
+
def fetch(method_name, *args, &block)
|
15
|
+
read!(method_name, *args)
|
16
|
+
rescue KeyError
|
17
|
+
write(method_name, *args, value: block.call)
|
18
|
+
end
|
19
|
+
|
20
|
+
def read(method_name, *args)
|
21
|
+
cache[method_name].fetch(args, nil)
|
22
|
+
end
|
23
|
+
|
24
|
+
def read!(method_name, *args)
|
25
|
+
cache[method_name].fetch(args)
|
26
|
+
end
|
27
|
+
|
28
|
+
def write(method_name, *args, value:)
|
29
|
+
cache[method_name][args] = value
|
17
30
|
end
|
18
31
|
end
|
19
32
|
end
|
data/lib/memo_pad/version.rb
CHANGED
data/lib/memo_pad.rb
CHANGED
@@ -12,7 +12,7 @@ require_relative "memo_pad/memo"
|
|
12
12
|
# Memoize results of complex executions on its memo_pad:
|
13
13
|
#
|
14
14
|
# def expensive_method
|
15
|
-
# memo_pad.
|
15
|
+
# memo_pad.fetch(:expensive_method) do
|
16
16
|
# # perform the expensive work
|
17
17
|
# end
|
18
18
|
# end
|
@@ -20,7 +20,7 @@ require_relative "memo_pad/memo"
|
|
20
20
|
# Pass in any arguments that the memoized result would depend on, if any:
|
21
21
|
#
|
22
22
|
# def expensive_with_arguments(foo, bar: nil)
|
23
|
-
# memo_pad.
|
23
|
+
# memo_pad.fetch(:expensive_with_arguments, foo, bar) do
|
24
24
|
# # perform the expensive work
|
25
25
|
# end
|
26
26
|
# end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: memo_pad
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Patrick Byrne
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2024-02-
|
11
|
+
date: 2024-02-14 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description:
|
14
14
|
email:
|