safe_memoize 1.6.0 → 1.7.1

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.
data/sig/safe_memoize.rbs CHANGED
@@ -66,7 +66,7 @@ module SafeMemoize
66
66
  end
67
67
 
68
68
  module ClassMethods
69
- def memoize: (Symbol | String method_name, ?ttl: Numeric?, ?max_size: Integer?, ?ttl_refresh: bool, ?if: (^(untyped result) -> boolish)?, ?unless: (^(untyped result) -> boolish)?, ?shared: bool, ?key: (^(*untyped args, **untyped kwargs) -> untyped)?, ?store: Stores::Base?, ?fiber_local: bool, ?ractor_safe: bool, ?namespace: String?, ?shared_cache: String?, ?cache_bust: (^() -> untyped) | Symbol | nil, ?copy_on_read: bool, ?group: Symbol | String | nil, ?circuit_breaker: bool | Hash[Symbol, untyped] | nil, **untyped extension_options) -> void
69
+ def memoize: (Symbol | String method_name, ?ttl: Numeric?, ?max_size: Integer?, ?ttl_refresh: bool, ?if: (^(untyped result) -> boolish)?, ?unless: (^(untyped result) -> boolish)?, ?shared: bool, ?key: (^(*untyped args, **untyped kwargs) -> untyped)?, ?store: Stores::Base | Array[Stores::Base] | nil, ?fiber_local: bool, ?ractor_safe: bool, ?namespace: String?, ?shared_cache: String?, ?cache_bust: (^() -> untyped) | Symbol | nil, ?copy_on_read: bool, ?group: Symbol | String | nil, ?circuit_breaker: bool | Hash[Symbol, untyped] | nil, ?stampede_protection: bool | Numeric | nil, **untyped extension_options) -> void
70
70
  def safe_memoize_store: () -> Stores::Base?
71
71
  def safe_memoize_store=: (Stores::Base?) -> Stores::Base?
72
72
  def safe_memoize_namespace: () -> String?
@@ -148,7 +148,7 @@ module SafeMemoize
148
148
 
149
149
  def memo_ttl: (Numeric? ttl) -> Float?
150
150
  def memo_expires_at: (Float? ttl) -> Float?
151
- def memo_record: (untyped value, expires_at: Float?) -> memo_record
151
+ def memo_record: (untyped value, expires_at: Float?, ?delta: Float?) -> memo_record
152
152
  def memo_record_value: (memo_record record) -> untyped
153
153
  def memo_record_live?: (memo_record? record) -> bool
154
154
  def memo_prune_expired_entries!: (Hash[memo_key, memo_record] cache) -> void
@@ -251,6 +251,14 @@ module SafeMemoize
251
251
  end
252
252
 
253
253
  module RactorSharedMethods
254
+ MUTEX_KEY: Symbol
255
+ PORTS: bool
256
+
257
+ def self.round_trip: (untyped supervisor, Symbol op, *untyped args) -> untyped
258
+ def self.round_trip_via_port: (untyped supervisor, Symbol op, *untyped args) -> untyped
259
+ def self.round_trip_via_queue: (untyped supervisor, Symbol op, *untyped args) -> untyped
260
+ def self.ractor_mutex: () -> Thread::Mutex
261
+
254
262
  def reset_ractor_memo: (Symbol | String method_name, *untyped args, **untyped kwargs) -> void
255
263
  def reset_all_ractor_memos: () -> void
256
264
  def ractor_memoized?: (Symbol | String method_name, *untyped args, **untyped kwargs) -> bool
@@ -301,6 +309,38 @@ module SafeMemoize
301
309
  def expired?: ({ expires_at: Float?, value: untyped, cached_at: Float }) -> bool
302
310
  end
303
311
 
312
+ class Multilevel < Base
313
+ attr_reader stores: Array[Base]
314
+
315
+ def initialize: (*Base stores, ?promote_expires_in: Numeric?) -> void
316
+ def read: (untyped key) -> untyped
317
+ def write: (untyped key, untyped value, ?expires_in: Numeric?) -> void
318
+ def delete: (untyped key) -> void
319
+ def clear: () -> void
320
+ def keys: () -> Array[untyped]
321
+ end
322
+
323
+ class XFetch < Base
324
+ ENVELOPE_KEY: Symbol
325
+ DEFAULT_BETA: Float
326
+ DEFAULT_DELTA: Float
327
+
328
+ attr_reader wrapped_store: Base
329
+ attr_reader beta: Float
330
+ attr_reader delta: Float
331
+
332
+ def initialize: (Base store, ?beta: Numeric, ?delta: Numeric) -> void
333
+ def read: (untyped key) -> untyped
334
+ def write: (untyped key, untyped value, ?expires_in: Numeric?) -> void
335
+ def delete: (untyped key) -> void
336
+ def clear: () -> void
337
+ def keys: () -> Array[untyped]
338
+
339
+ private
340
+
341
+ def envelope?: (untyped value) -> bool
342
+ end
343
+
304
344
  class CircuitBreaker < Base
305
345
  DEFAULT_ERROR_THRESHOLD: Integer
306
346
  DEFAULT_PROBE_INTERVAL: Float
metadata CHANGED
@@ -1,28 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: safe_memoize
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.6.0
4
+ version: 1.7.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Chuck Smith
8
8
  bindir: exe
9
9
  cert_chain: []
10
10
  date: 1980-01-02 00:00:00.000000000 Z
11
- dependencies:
12
- - !ruby/object:Gem::Dependency
13
- name: simplecov
14
- requirement: !ruby/object:Gem::Requirement
15
- requirements:
16
- - - "~>"
17
- - !ruby/object:Gem::Version
18
- version: '0.22'
19
- type: :development
20
- prerelease: false
21
- version_requirements: !ruby/object:Gem::Requirement
22
- requirements:
23
- - - "~>"
24
- - !ruby/object:Gem::Version
25
- version: '0.22'
11
+ dependencies: []
26
12
  description: 'SafeMemoize is a production-ready, zero-dependency memoization library
27
13
  for Ruby. It uses Ruby''s prepend mechanism to wrap methods with a thread-safe cache
28
14
  (Mutex + double-check locking) that correctly handles nil and false return values
@@ -49,6 +35,7 @@ files:
49
35
  - ROADMAP.md
50
36
  - Rakefile
51
37
  - UPGRADING.md
38
+ - benchmarks/BENCHMARK.md
52
39
  - benchmarks/README.md
53
40
  - benchmarks/benchmark.rb
54
41
  - codecov.yml
@@ -79,8 +66,10 @@ files:
79
66
  - lib/safe_memoize/stores/base.rb
80
67
  - lib/safe_memoize/stores/circuit_breaker.rb
81
68
  - lib/safe_memoize/stores/memory.rb
69
+ - lib/safe_memoize/stores/multilevel.rb
82
70
  - lib/safe_memoize/stores/rails_cache.rb
83
71
  - lib/safe_memoize/stores/redis.rb
72
+ - lib/safe_memoize/stores/xfetch.rb
84
73
  - lib/safe_memoize/version.rb
85
74
  - rbi/safe_memoize.rbi
86
75
  - sig/safe_memoize.rbs