memo_pad 0.1.0 → 0.3.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: b8dbc10fe1065849e7193f234563fdaf7938f42eb238e59cc3b40ae1b90eac5a
4
- data.tar.gz: b0dc4895a3981928d68525da637ac9deea9544e88325487015cfde5d7e2f78be
3
+ metadata.gz: 97c689cb2334577cebb1cc240157fe251ed5c5679da2c7568dccb7afd0034ca3
4
+ data.tar.gz: 917b40d49c689d4709d013363aa8fa23e7f0b50e37d3b3f4d5cab2f5a7309c8d
5
5
  SHA512:
6
- metadata.gz: 10fe52bbdd3db4877e9cca94856ebd9ec5f6ffcaadf2a116906b9c66363d8d5647a73113c019c08871c0d2f58f59ba6f6932f9b1fcd4d2c5036f98ed0a75f035
7
- data.tar.gz: d9c2d8d228527c0f1f94a05cf092646bb49b99a2cdd85e21acfeaa1f522353ca3acff9622ddcb4afc3185ed3774aef0ae92386c8044cfadb36a62682aa61496c
6
+ metadata.gz: 4cf0fdf8831d0166f340962bcebf2c4fd7ce7543903e0de0236fa8a96a46f40853ee00538638bbfac5f68cd34d289e0b937e02c11df6e97e047fd82b599657b7
7
+ data.tar.gz: 4f36f0b1bf2f7941378e7a032cb5c8fb1eef0e706e8d03ce14f48a2284171e2b81be9c5647c51e3164854e6a9e49dd4d96acbf37955bfb3fdfef9da0ffbe38a8
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,14 @@
1
1
  ## [Unreleased]
2
2
 
3
+ ## [0.3.0] - 2024-02-16
4
+
5
+ - Add `#clear` method to flush all cached entries on the instance.
6
+
7
+ ## [0.2.0] - 2024-02-14
8
+
9
+ - **BREAKING**: Changes `MemoPad::Memo#call` to `MemoPad::Memo#fetch` to more closely match interfaces like `ActiveSupport::Cache`.
10
+ - Add `#read` and `#write` methods to allow for lower-level manipulation of the cached values, similarly inspired by the interface of `ActiveSupport::Cache`.
11
+
3
12
  ## [0.1.0] - 2024-01-22
4
13
 
5
14
  - Initial release
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- memo_pad (0.1.0)
4
+ memo_pad (0.3.0)
5
5
 
6
6
  GEM
7
7
  remote: https://rubygems.org/
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.call(name, *args) do; end` to memoize the result of the block.
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,47 @@ class Foo
35
35
  include MemoPad
36
36
 
37
37
  def expensive_method
38
- memo_pad.call(:expensive_method) do
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.call(:expensive_method, foo, bar) do
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.call(:complex_memoization_first) do
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.call(:complex_memoization_second, first_part) do
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
+
73
+ You can also flush the whole of the cache on an instance.
74
+
75
+ ```ruby
76
+ foo.memo_pad.clear
77
+ ```
78
+
62
79
  ## Development
63
80
 
64
81
  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,26 @@ module MemoPad
11
11
  end
12
12
  end
13
13
 
14
- def call(method_name, *args, &block)
15
- result = cache[method_name].fetch(args, &block)
16
- cache[method_name][args] = result
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 clear
21
+ cache.clear
22
+ end
23
+
24
+ def read(method_name, *args)
25
+ cache[method_name].fetch(args, nil)
26
+ end
27
+
28
+ def read!(method_name, *args)
29
+ cache[method_name].fetch(args)
30
+ end
31
+
32
+ def write(method_name, *args, value:)
33
+ cache[method_name][args] = value
17
34
  end
18
35
  end
19
36
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module MemoPad
4
- VERSION = "0.1.0"
4
+ VERSION = "0.3.0"
5
5
  end
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.call(:expensive_method) do
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.call(:expensive_with_arguments, foo, bar) do
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.1.0
4
+ version: 0.3.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-09 00:00:00.000000000 Z
11
+ date: 2024-02-16 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description:
14
14
  email: