typed_cache 0.1.1 → 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 +4 -4
- checksums.yaml.gz.sig +0 -0
- data/README.md +139 -20
- data/examples.md +140 -50
- data/lib/typed_cache/backends/active_support.rb +50 -5
- data/lib/typed_cache/backends/memory.rb +14 -11
- data/lib/typed_cache/backends.rb +6 -8
- data/lib/typed_cache/cache_builder.rb +72 -19
- data/lib/typed_cache/cache_key.rb +11 -1
- data/lib/typed_cache/cache_ref.rb +20 -16
- data/lib/typed_cache/clock.rb +31 -14
- data/lib/typed_cache/decorator.rb +25 -0
- data/lib/typed_cache/decorators/instrumented.rb +92 -0
- data/lib/typed_cache/decorators.rb +7 -3
- data/lib/typed_cache/either.rb +22 -0
- data/lib/typed_cache/errors.rb +9 -1
- data/lib/typed_cache/instrumenter.rb +43 -0
- data/lib/typed_cache/instrumenters/active_support.rb +28 -0
- data/lib/typed_cache/instrumenters/mixins/namespaced_singleton.rb +55 -0
- data/lib/typed_cache/instrumenters/mixins.rb +8 -0
- data/lib/typed_cache/instrumenters/monitor.rb +27 -0
- data/lib/typed_cache/instrumenters/null.rb +26 -0
- data/lib/typed_cache/instrumenters.rb +39 -0
- data/lib/typed_cache/maybe.rb +18 -0
- data/lib/typed_cache/namespace.rb +33 -6
- data/lib/typed_cache/railtie.rb +15 -0
- data/lib/typed_cache/registry.rb +15 -0
- data/lib/typed_cache/snapshot.rb +18 -10
- data/lib/typed_cache/store.rb +50 -15
- data/lib/typed_cache/version.rb +1 -1
- data/lib/typed_cache.rb +34 -14
- data/rbi/typed_cache/backend.rbi +9 -0
- data/rbi/typed_cache/backends/active_support.rbi +13 -0
- data/rbi/typed_cache/backends/memory.rbi +13 -0
- data/rbi/typed_cache/backends.rbi +19 -0
- data/rbi/typed_cache/cache_builder.rbi +23 -0
- data/rbi/typed_cache/cache_key.rbi +16 -0
- data/rbi/typed_cache/cache_ref.rbi +56 -0
- data/rbi/typed_cache/decorator.rbi +67 -0
- data/rbi/typed_cache/decorators/instrumented.rbi +13 -0
- data/rbi/typed_cache/decorators.rbi +19 -0
- data/rbi/typed_cache/either.rbi +122 -0
- data/rbi/typed_cache/errors.rbi +20 -0
- data/rbi/typed_cache/instrumenter.rbi +45 -0
- data/rbi/typed_cache/instrumenters/mixins/namedspaced_singleton.rbi +33 -0
- data/rbi/typed_cache/instrumenters.rbi +19 -0
- data/rbi/typed_cache/maybe.rbi +108 -0
- data/rbi/typed_cache/namespace.rbi +30 -0
- data/rbi/typed_cache/snapshot.rbi +54 -0
- data/rbi/typed_cache/store.rbi +71 -0
- data/rbi/typed_cache/version.rbi +5 -0
- data/rbi/typed_cache.rbi +49 -0
- data/sig/generated/typed_cache/backends/active_support.rbs +14 -2
- data/sig/generated/typed_cache/backends/memory.rbs +2 -2
- data/sig/generated/typed_cache/backends.rbs +2 -0
- data/sig/generated/typed_cache/cache_builder.rbs +13 -2
- data/sig/generated/typed_cache/cache_key.rbs +5 -0
- data/sig/generated/typed_cache/cache_ref.rbs +4 -4
- data/sig/generated/typed_cache/clock.rbs +19 -9
- data/sig/generated/typed_cache/decorator.rbs +12 -0
- data/sig/generated/typed_cache/decorators/instrumented.rbs +35 -0
- data/sig/generated/typed_cache/decorators.rbs +2 -0
- data/sig/generated/typed_cache/either.rbs +24 -0
- data/sig/generated/typed_cache/errors.rbs +2 -0
- data/sig/generated/typed_cache/instrumenter.rbs +31 -0
- data/sig/generated/typed_cache/instrumenters/active_support.rbs +20 -0
- data/sig/generated/typed_cache/instrumenters/mixins/namespaced_singleton.rbs +36 -0
- data/sig/generated/typed_cache/instrumenters/mixins.rbs +8 -0
- data/sig/generated/typed_cache/instrumenters/monitor.rbs +19 -0
- data/sig/generated/typed_cache/instrumenters/null.rbs +21 -0
- data/sig/generated/typed_cache/instrumenters.rbs +26 -0
- data/sig/generated/typed_cache/maybe.rbs +20 -0
- data/sig/generated/typed_cache/namespace.rbs +24 -3
- data/sig/generated/typed_cache/railtie.rbs +6 -0
- data/sig/generated/typed_cache/registry.rbs +8 -0
- data/sig/generated/typed_cache/snapshot.rbs +12 -6
- data/sig/generated/typed_cache/store/instrumented.rbs +2 -6
- data/sig/generated/typed_cache/store.rbs +26 -8
- data/sig/generated/typed_cache.rbs +8 -6
- data/typed_cache.gemspec +5 -4
- data.tar.gz.sig +0 -0
- metadata +48 -27
- metadata.gz.sig +0 -0
- data/lib/typed_cache/instrumentation.rb +0 -112
- data/lib/typed_cache/store/instrumented.rb +0 -83
- data/sig/generated/typed_cache/instrumentation.rbs +0 -30
- data/sig/handwritten/gems/zeitwerk/2.7/zeitwerk.rbs +0 -9
@@ -0,0 +1,56 @@
|
|
1
|
+
# typed: strict
|
2
|
+
|
3
|
+
module TypedCache
|
4
|
+
class CacheRef
|
5
|
+
extend T::Generic
|
6
|
+
|
7
|
+
sealed!
|
8
|
+
|
9
|
+
RefType = type_member
|
10
|
+
|
11
|
+
sig { returns(::TypedCache::Either[Error, ::TypedCache::Snapshot[RefType]]) }
|
12
|
+
def read; end
|
13
|
+
|
14
|
+
sig { params(value: RefType).returns(::TypedCache::Either[Error, ::TypedCache::Snapshot[RefType]]) }
|
15
|
+
def write(value); end
|
16
|
+
|
17
|
+
sig { returns(::TypedCache::Either[Error, ::TypedCache::Snapshot[RefType]]) }
|
18
|
+
def delete; end
|
19
|
+
|
20
|
+
sig { params(block: T.proc.params(value: RefType).returns(RefType)).returns(::TypedCache::Either[Error, ::TypedCache::Snapshot[RefType]]) }
|
21
|
+
def fetch(&block); end
|
22
|
+
|
23
|
+
sig { returns(T::Boolean) }
|
24
|
+
def present?; end
|
25
|
+
|
26
|
+
sig { returns(T::Boolean) }
|
27
|
+
def empty?; end
|
28
|
+
|
29
|
+
sig { params(block: T.proc.params(value: RefType).returns(RefType)).returns(::TypedCache::Either[Error, ::TypedCache::Snapshot[RefType]]) }
|
30
|
+
def update(&block); end
|
31
|
+
|
32
|
+
sig { params(default: RefType).returns(RefType) }
|
33
|
+
def value_or(default); end
|
34
|
+
|
35
|
+
sig { returns(::TypedCache::Maybe[RefType]) }
|
36
|
+
def value_maybe; end
|
37
|
+
|
38
|
+
sig { params(block: T.proc.params(value: RefType).returns(RefType)).returns(::TypedCache::Either[Error, ::TypedCache::Snapshot[RefType]]) }
|
39
|
+
def compute_if_absent(&block); end
|
40
|
+
|
41
|
+
sig { params(new_key: String).returns(::TypedCache::CacheRef[RefType]) }
|
42
|
+
def with_key(new_key); end
|
43
|
+
|
44
|
+
sig { params(scope_key: String).returns(::TypedCache::CacheRef[RefType]) }
|
45
|
+
def scope(scope_key); end
|
46
|
+
|
47
|
+
sig { type_parameters(:T).params(left_fn: T.proc.params(value: Error).returns(T.type_parameter(:T)), right_fn: T.proc.params(value: ::TypedCache::Snapshot[RefType]).returns(T.type_parameter(:T))).returns(T.type_parameter(:T)) }
|
48
|
+
def fold(left_fn, right_fn); end
|
49
|
+
|
50
|
+
sig { type_parameters(:T).params(block: T.proc.params(value: ::TypedCache::Snapshot[RefType]).returns(T.type_parameter(:T))).returns(::TypedCache::Either[Error, T.type_parameter(:T)]) }
|
51
|
+
def with_snapshot(&block); end
|
52
|
+
|
53
|
+
sig { type_parameters(:T).params(block: T.proc.params(value: RefType).returns(T.type_parameter(:T))).returns(::TypedCache::Either[Error, T.type_parameter(:T)]) }
|
54
|
+
def with(&block); end
|
55
|
+
end
|
56
|
+
end
|
@@ -0,0 +1,67 @@
|
|
1
|
+
# typed: strict
|
2
|
+
|
3
|
+
module TypedCache
|
4
|
+
module Decorator
|
5
|
+
extend T::Generic
|
6
|
+
|
7
|
+
include ::TypedCache::Store
|
8
|
+
|
9
|
+
abstract!
|
10
|
+
|
11
|
+
CachedType = type_member
|
12
|
+
|
13
|
+
sig { params(store: ::TypedCache::Store[CachedType]).void }
|
14
|
+
def initialize(store); end
|
15
|
+
|
16
|
+
sig { overridable.returns(::TypedCache::Store[CachedType]) }
|
17
|
+
def store; end
|
18
|
+
|
19
|
+
sig(:final) { params(key: T.any(String, ::TypedCache::CacheKey)).returns(::TypedCache::CacheRef[CachedType]) }
|
20
|
+
def ref(key); end
|
21
|
+
|
22
|
+
sig { overridable.params(key: T.any(String, ::TypedCache::CacheKey)).returns(::TypedCache::Either[Error, ::TypedCache::Snapshot[CachedType]]) }
|
23
|
+
def read(key); end
|
24
|
+
|
25
|
+
sig { overridable.params(key: T.any(String, ::TypedCache::CacheKey), value: CachedType).returns(::TypedCache::Either[Error, ::TypedCache::Snapshot[CachedType]]) }
|
26
|
+
def write(key, value); end
|
27
|
+
|
28
|
+
sig { overridable.params(key: T.any(String, ::TypedCache::CacheKey)).returns(::TypedCache::Either[Error, ::TypedCache::Snapshot[CachedType]]) }
|
29
|
+
def delete(key); end
|
30
|
+
|
31
|
+
sig { overridable.params(key: T.any(String, ::TypedCache::CacheKey)).returns(T::Boolean) }
|
32
|
+
def key?(key); end
|
33
|
+
|
34
|
+
sig { overridable.params(key: T.any(String, ::TypedCache::CacheKey), block: T.proc.params(value: CachedType).returns(CachedType)).returns(::TypedCache::Either[Error, ::TypedCache::Snapshot[CachedType]]) }
|
35
|
+
def fetch(key, &block); end
|
36
|
+
|
37
|
+
sig { overridable.params(keys: T::Array[T.any(String, ::TypedCache::CacheKey)]).returns(::TypedCache::Either[Error, T::Array[::TypedCache::Snapshot[CachedType]]]) }
|
38
|
+
def read_all(keys); end
|
39
|
+
|
40
|
+
sig { overridable.params(keys: T::Array[T.any(String, ::TypedCache::CacheKey)], block: T.proc.params(key: T.any(String, ::TypedCache::CacheKey)).returns(CachedType)).returns(::TypedCache::Either[Error, T::Array[::TypedCache::Snapshot[CachedType]]]) }
|
41
|
+
def fetch_all(keys, &block); end
|
42
|
+
|
43
|
+
sig { overridable.params(values: T::Hash[T.any(String, ::TypedCache::CacheKey), CachedType]).returns(::TypedCache::Either[Error, T::Array[::TypedCache::Snapshot[CachedType]]]) }
|
44
|
+
def write_all(values); end
|
45
|
+
|
46
|
+
sig { overridable.void }
|
47
|
+
def clear; end
|
48
|
+
|
49
|
+
sig(:final) { returns(::TypedCache::Namespace) }
|
50
|
+
def namespace; end
|
51
|
+
|
52
|
+
sig(:final) { params(namespace: ::TypedCache::Namespace).returns(::TypedCache::Store[CachedType]) }
|
53
|
+
def with_namespace(namespace); end
|
54
|
+
|
55
|
+
sig { abstract.returns(String) }
|
56
|
+
def store_type; end
|
57
|
+
|
58
|
+
sig { overridable.params(other: T.self_type).void }
|
59
|
+
def initialize_copy(other); end
|
60
|
+
|
61
|
+
sig(:final) { params(key: T.any(String, ::TypedCache::CacheKey)).returns(::TypedCache::CacheKey) }
|
62
|
+
def namespaced_key(key); end
|
63
|
+
|
64
|
+
sig { overridable.returns(::TypedCache::Instrumenter) }
|
65
|
+
def instrumenter; end
|
66
|
+
end
|
67
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
# typed: strict
|
2
|
+
|
3
|
+
module TypedCache
|
4
|
+
module Decorators
|
5
|
+
class << self
|
6
|
+
sig { params(name: Symbol, klass: T::Class[::TypedCache::Decorator[T.anything]]).returns(T.self_type) }
|
7
|
+
def register(name, klass); end
|
8
|
+
|
9
|
+
sig { params(name: Symbol, args: T::Array[T.anything], options: T::Hash[Symbol, T.anything]).returns(T.self_type) }
|
10
|
+
def resolve(name, *args, **options); end
|
11
|
+
|
12
|
+
sig { returns(T::Array[T::Class[::TypedCache::Decorator[T.anything]]]) }
|
13
|
+
def available; end
|
14
|
+
|
15
|
+
sig { params(name: Symbol).returns(T::Boolean) }
|
16
|
+
def registered?(name); end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,122 @@
|
|
1
|
+
# typed: strict
|
2
|
+
|
3
|
+
module TypedCache
|
4
|
+
module Either
|
5
|
+
extend T::Generic
|
6
|
+
include Kernel
|
7
|
+
|
8
|
+
mixes_in_class_methods(T::Generic)
|
9
|
+
|
10
|
+
sealed!
|
11
|
+
interface!
|
12
|
+
|
13
|
+
L = type_member(:out)
|
14
|
+
R = type_member(:out)
|
15
|
+
|
16
|
+
interface!
|
17
|
+
|
18
|
+
sig { abstract.returns(T::Boolean) }
|
19
|
+
def left?; end
|
20
|
+
|
21
|
+
sig { abstract.returns(T::Boolean) }
|
22
|
+
def right?; end
|
23
|
+
|
24
|
+
sig { abstract.type_parameters(:T).params(block: T.proc.params(value: R).returns(T.type_parameter(:T))).returns(::TypedCache::Either[L, T.type_parameter(:T)]) }
|
25
|
+
def map(&block); end
|
26
|
+
|
27
|
+
sig { abstract.type_parameters(:T).params(block: T.proc.params(value: L).returns(T.type_parameter(:T))).returns(::TypedCache::Either[T.type_parameter(:T), R]) }
|
28
|
+
def map_left(&block); end
|
29
|
+
|
30
|
+
sig { abstract.type_parameters(:E, :R2).params(block: T.proc.params(value: R).returns(::TypedCache::Either[T.type_parameter(:E), T.type_parameter(:R2)])).returns(::TypedCache::Either[T.type_parameter(:E), T.type_parameter(:R2)]) }
|
31
|
+
def bind(&block); end
|
32
|
+
|
33
|
+
sig { abstract.type_parameters(:T).params(left_block: T.proc.params(value: L).returns(T.type_parameter(:T)), right_block: T.proc.params(value: R).returns(T.type_parameter(:T))).returns(T.type_parameter(:T)) }
|
34
|
+
def fold(left_block, right_block); end
|
35
|
+
|
36
|
+
sig { abstract.params(block: T.proc.params(value: L).void).returns(R) }
|
37
|
+
def right_or_else(&block); end
|
38
|
+
|
39
|
+
sig { abstract.returns(R) }
|
40
|
+
def right_or_raise!; end
|
41
|
+
end
|
42
|
+
|
43
|
+
class Left
|
44
|
+
sealed!
|
45
|
+
|
46
|
+
include ::TypedCache::Either
|
47
|
+
extend T::Generic
|
48
|
+
|
49
|
+
L = type_member(:out)
|
50
|
+
R = type_member(:out) { { fixed: T.noreturn } }
|
51
|
+
|
52
|
+
sig { override.returns(TrueClass) }
|
53
|
+
def left?; end
|
54
|
+
|
55
|
+
sig { override.returns(FalseClass) }
|
56
|
+
def right?; end
|
57
|
+
|
58
|
+
sig { override.type_parameters(:T).params(block: T.proc.params(value: R).returns(T.type_parameter(:T))).returns(T.self_type) }
|
59
|
+
def map(&block); end
|
60
|
+
|
61
|
+
sig { override.type_parameters(:T).params(block: T.proc.params(value: L).returns(T.type_parameter(:T))).returns(Left[T.type_parameter(:T)]) }
|
62
|
+
def map_left(&block); end
|
63
|
+
|
64
|
+
sig { override.type_parameters(:E, :R2).params(block: T.proc.params(value: R).returns(::TypedCache::Either[T.type_parameter(:E), T.type_parameter(:R2)])).returns(T.self_type) }
|
65
|
+
def bind(&block); end
|
66
|
+
|
67
|
+
sig { override.type_parameters(:T).params(left_block: T.proc.params(value: L).returns(T.type_parameter(:T)), right_block: T.proc.params(value: R).returns(T.type_parameter(:T))).returns(T.type_parameter(:T)) }
|
68
|
+
def fold(left_block, right_block); end
|
69
|
+
|
70
|
+
sig { returns(L) }
|
71
|
+
def value; end
|
72
|
+
|
73
|
+
sig { returns(L) }
|
74
|
+
def error; end
|
75
|
+
|
76
|
+
sig { params(block: T.proc.params(value: L).void).returns(R) }
|
77
|
+
def right_or_else(&block); end
|
78
|
+
|
79
|
+
sig { returns(T.noreturn) }
|
80
|
+
def right_or_raise!; end
|
81
|
+
end
|
82
|
+
|
83
|
+
class Right
|
84
|
+
sealed!
|
85
|
+
|
86
|
+
include ::TypedCache::Either
|
87
|
+
extend T::Generic
|
88
|
+
|
89
|
+
L = type_member(:out) { { fixed: T.noreturn } }
|
90
|
+
R = type_member(:out)
|
91
|
+
|
92
|
+
sig { override.returns(FalseClass) }
|
93
|
+
def left?; end
|
94
|
+
|
95
|
+
sig { override.returns(TrueClass) }
|
96
|
+
def right?; end
|
97
|
+
|
98
|
+
sig { override.type_parameters(:T).params(block: T.proc.params(value: R).returns(T.type_parameter(:T))).returns(Right[T.type_parameter(:T)]) }
|
99
|
+
def map(&block); end
|
100
|
+
|
101
|
+
sig { override.type_parameters(:T).params(block: T.proc.params(value: L).returns(T.type_parameter(:T))).returns(T.self_type) }
|
102
|
+
def map_left(&block); end
|
103
|
+
|
104
|
+
sig { override.type_parameters(:E, :R2).params(block: T.proc.params(value: R).returns(::TypedCache::Either[T.type_parameter(:E), T.type_parameter(:R2)])).returns(::TypedCache::Either[T.type_parameter(:E), T.type_parameter(:R2)]) }
|
105
|
+
def bind(&block); end
|
106
|
+
|
107
|
+
sig { override.type_parameters(:T).params(left_block: T.proc.params(value: L).returns(T.type_parameter(:T)), right_block: T.proc.params(value: R).returns(T.type_parameter(:T))).returns(T.type_parameter(:T)) }
|
108
|
+
def fold(left_block, right_block); end
|
109
|
+
|
110
|
+
sig { returns(R) }
|
111
|
+
def value; end
|
112
|
+
|
113
|
+
sig { returns(R) }
|
114
|
+
def result; end
|
115
|
+
|
116
|
+
sig { params(block: T.proc.params(value: T.anything).void).returns(R) }
|
117
|
+
def right_or_else(&block); end
|
118
|
+
|
119
|
+
sig { returns(R) }
|
120
|
+
def right_or_raise!; end
|
121
|
+
end
|
122
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
# typed: strict
|
2
|
+
|
3
|
+
module TypedCache
|
4
|
+
class Error < StandardError; end
|
5
|
+
|
6
|
+
class StoreError < ::TypedCache::Error
|
7
|
+
sig { params(operation: Symbol, key: ::TypedCache::CacheKey, message: String, original_error: T.nilable(Error)).void }
|
8
|
+
def initialize(operation, key, message, original_error = nil); end
|
9
|
+
end
|
10
|
+
|
11
|
+
class TypeError < ::TypedCache::Error
|
12
|
+
sig { params(expected_type: String, actual_type: String, value: T.untyped, message: String).void }
|
13
|
+
def initialize(expected_type, actual_type, value, message); end
|
14
|
+
end
|
15
|
+
|
16
|
+
class CacheMissError < ::TypedCache::Error
|
17
|
+
sig { params(key: ::TypedCache::CacheKey).void }
|
18
|
+
def initialize(key); end
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,45 @@
|
|
1
|
+
# typed: strict
|
2
|
+
|
3
|
+
module TypedCache
|
4
|
+
module Instrumenter
|
5
|
+
abstract!
|
6
|
+
|
7
|
+
sig do
|
8
|
+
abstract.type_parameters(:R)
|
9
|
+
.params(
|
10
|
+
event_name: String,
|
11
|
+
key: String,
|
12
|
+
payload: T::Hash[Symbol, T.untyped],
|
13
|
+
blk: T.proc.returns(T.type_parameter(:R)),
|
14
|
+
).returns(T.type_parameter(:R))
|
15
|
+
end
|
16
|
+
def instrument(event_name, key, **payload, &blk); end
|
17
|
+
|
18
|
+
sig do
|
19
|
+
abstract.type_parameters(:R)
|
20
|
+
.params(
|
21
|
+
event_name: String,
|
22
|
+
filters: T::Hash[Symbol, T.untyped],
|
23
|
+
blk: T.proc.void,
|
24
|
+
).returns(T.type_parameter(:R))
|
25
|
+
end
|
26
|
+
def subscribe(event_name, **filters, &blk); end
|
27
|
+
|
28
|
+
sig { overridable.returns(String) }
|
29
|
+
def namespace; end
|
30
|
+
|
31
|
+
sig { overridable.returns(T::Boolean) }
|
32
|
+
def enabled?; end
|
33
|
+
|
34
|
+
private
|
35
|
+
|
36
|
+
sig { overridable.params(operation: String, key: String, payload: T::Hash[Symbol, T.untyped]).returns(T::Hash[Symbol, T.untyped]) }
|
37
|
+
def build_payload(operation, key, **payload); end
|
38
|
+
|
39
|
+
sig(:final) { params(operation: String).returns(String) }
|
40
|
+
def event_name(operation); end
|
41
|
+
|
42
|
+
sig(:final) { returns(::TypedCache::Private::Configuration::Instrumentation) }
|
43
|
+
def config; end
|
44
|
+
end
|
45
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
# typed: strict
|
2
|
+
|
3
|
+
module TypedCache
|
4
|
+
module Instrumenters
|
5
|
+
module Mixins
|
6
|
+
module NamedspacedSingleton
|
7
|
+
requires_ancestor { ::TypedCache::Instrumenter }
|
8
|
+
|
9
|
+
class << self
|
10
|
+
sig { returns(T::Array[T::Class[T.all(::TypedCache::Instrumenter, ::TypedCache::Instrumenters::Mixins::NamedspacedSingleton)]]) }
|
11
|
+
def all; end
|
12
|
+
end
|
13
|
+
|
14
|
+
sig { params(namespace: ::TypedCache::Namespace).void }
|
15
|
+
def initialize(namespace); end
|
16
|
+
|
17
|
+
sig { returns(::TypedCache::Namespace) }
|
18
|
+
def namespace; end
|
19
|
+
|
20
|
+
module ClassMethods
|
21
|
+
sig { params(namespace: ::TypedCache::Namespace).returns(T::Class[T.all(::TypedCache::Instrumenter, ::TypedCache::Instrumenters::Mixins::NamedspacedSingleton)]) }
|
22
|
+
def new(namespace: T.unsafe(nil)); end
|
23
|
+
|
24
|
+
sig { params(namespace: ::TypedCache::Namespace).returns(T::Class[T.all(::TypedCache::Instrumenter, ::TypedCache::Instrumenters::Mixins::NamedspacedSingleton)]) }
|
25
|
+
def get(namespace); end
|
26
|
+
|
27
|
+
sig { void }
|
28
|
+
def clear_namespace_cache; end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
# typed: strict
|
2
|
+
|
3
|
+
module TypedCache
|
4
|
+
module Instrumenters
|
5
|
+
class << self
|
6
|
+
sig { params(name: Symbol, klass: T::Class[::TypedCache::Instrumenter]).returns(T.self_type) }
|
7
|
+
def register(name, klass); end
|
8
|
+
|
9
|
+
sig { params(name: Symbol, args: T::Array[T.anything], options: T::Hash[Symbol, T.anything]).returns(T.self_type) }
|
10
|
+
def resolve(name, *args, **options); end
|
11
|
+
|
12
|
+
sig { returns(T::Array[T::Class[::TypedCache::Instrumenter]]) }
|
13
|
+
def available; end
|
14
|
+
|
15
|
+
sig { params(name: Symbol).returns(T::Boolean) }
|
16
|
+
def registered?(name); end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,108 @@
|
|
1
|
+
# typed: strict
|
2
|
+
|
3
|
+
module TypedCache
|
4
|
+
module Maybe
|
5
|
+
include Kernel
|
6
|
+
extend T::Generic
|
7
|
+
|
8
|
+
mixes_in_class_methods(T::Generic)
|
9
|
+
|
10
|
+
sealed!
|
11
|
+
interface!
|
12
|
+
|
13
|
+
V = type_member(:out)
|
14
|
+
|
15
|
+
sig { abstract.returns(T::Boolean) }
|
16
|
+
def some?; end
|
17
|
+
|
18
|
+
sig { abstract.returns(T::Boolean) }
|
19
|
+
def nothing?; end
|
20
|
+
|
21
|
+
sig { abstract.type_parameters(:T).params(block: T.proc.params(value: V).returns(T.type_parameter(:T))).returns(::TypedCache::Maybe[T.type_parameter(:T)]) }
|
22
|
+
def map(&block); end
|
23
|
+
|
24
|
+
sig { abstract.type_parameters(:T).params(block: T.proc.params(value: V).returns(::TypedCache::Maybe[T.type_parameter(:T)])).returns(::TypedCache::Maybe[T.type_parameter(:T)]) }
|
25
|
+
def bind(&block); end
|
26
|
+
|
27
|
+
alias flat_map bind
|
28
|
+
|
29
|
+
sig { abstract.type_parameters(:T).params(block: T.proc.returns(T.type_parameter(:T))).returns(T.any(T.type_parameter(:T), V)) }
|
30
|
+
def value_or_else(&block); end
|
31
|
+
|
32
|
+
sig { abstract.type_parameters(:T).params(value: T.type_parameter(:T)).returns(T.any(T.type_parameter(:T), V)) }
|
33
|
+
def value_or(value); end
|
34
|
+
|
35
|
+
sig { abstract.returns(V) }
|
36
|
+
def value_or_raise!; end
|
37
|
+
|
38
|
+
class << self
|
39
|
+
sig { type_parameters(:T).params(value: T.type_parameter(:T)).returns(::TypedCache::Some[T.type_parameter(:T)]) }
|
40
|
+
def some(value); end
|
41
|
+
|
42
|
+
sig { returns(::TypedCache::Nothing) }
|
43
|
+
def none; end
|
44
|
+
|
45
|
+
sig { params(value: NilClass).returns(::TypedCache::Nothing) }
|
46
|
+
sig { params(value: ::TypedCache::Nothing).returns(::TypedCache::Nothing) }
|
47
|
+
sig { type_parameters(:T).params(value: ::TypedCache::Some[T.type_parameter(:T)]).returns(::TypedCache::Some[T.type_parameter(:T)]) }
|
48
|
+
sig { type_parameters(:T).params(value: T.type_parameter(:T)).returns(::TypedCache::Some[T.type_parameter(:T)]) }
|
49
|
+
def wrap(value); end
|
50
|
+
|
51
|
+
alias [] some
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
class Some
|
56
|
+
sealed!
|
57
|
+
|
58
|
+
include ::TypedCache::Maybe
|
59
|
+
extend T::Generic
|
60
|
+
|
61
|
+
V = type_member(:out)
|
62
|
+
|
63
|
+
sig { override.returns(TrueClass) }
|
64
|
+
def some?; end
|
65
|
+
|
66
|
+
sig { override.returns(FalseClass) }
|
67
|
+
def nothing?; end
|
68
|
+
|
69
|
+
sig { override.type_parameters(:T).params(block: T.proc.params(value: V).returns(T.type_parameter(:T))).returns(Some[T.type_parameter(:T)]) }
|
70
|
+
def map(&block); end
|
71
|
+
|
72
|
+
sig { override.type_parameters(:T).params(block: T.proc.params(value: V).returns(::TypedCache::Maybe[T.type_parameter(:T)])).returns(::TypedCache::Maybe[T.type_parameter(:T)]) }
|
73
|
+
def bind(&block); end
|
74
|
+
|
75
|
+
sig { override.type_parameters(:T).params(value: T.type_parameter(:T)).returns(V) }
|
76
|
+
def value_or(value); end
|
77
|
+
|
78
|
+
sig { override.returns(V) }
|
79
|
+
def value_or_raise!; end
|
80
|
+
end
|
81
|
+
|
82
|
+
class Nothing
|
83
|
+
sealed!
|
84
|
+
|
85
|
+
include ::TypedCache::Maybe
|
86
|
+
extend T::Generic
|
87
|
+
|
88
|
+
V = type_member(:out) { { fixed: T.noreturn } }
|
89
|
+
|
90
|
+
sig { override.returns(FalseClass) }
|
91
|
+
def some?; end
|
92
|
+
|
93
|
+
sig { override.returns(TrueClass) }
|
94
|
+
def nothing?; end
|
95
|
+
|
96
|
+
sig { override.type_parameters(:T).params(block: T.proc.params(value: V).returns(T.type_parameter(:T))).returns(T.self_type) }
|
97
|
+
def map(&block); end
|
98
|
+
|
99
|
+
sig { override.type_parameters(:T).params(block: T.proc.params(value: V).returns(::TypedCache::Maybe[T.type_parameter(:T)])).returns(T.self_type) }
|
100
|
+
def bind(&block); end
|
101
|
+
|
102
|
+
sig { override.type_parameters(:T).params(value: T.type_parameter(:T)).returns(T.type_parameter(:T)) }
|
103
|
+
def value_or(value); end
|
104
|
+
|
105
|
+
sig { override.returns(T.noreturn) }
|
106
|
+
def value_or_raise!; end
|
107
|
+
end
|
108
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
# typed: strict
|
2
|
+
|
3
|
+
module TypedCache
|
4
|
+
class Namespace
|
5
|
+
sealed!
|
6
|
+
|
7
|
+
class << self
|
8
|
+
sig { returns(T.attached_class) }
|
9
|
+
def root; end
|
10
|
+
|
11
|
+
sig { params(namespace: String, namespaces: String).returns(T.attached_class) }
|
12
|
+
def at(namespace, *namespaces); end
|
13
|
+
end
|
14
|
+
|
15
|
+
sig { params(namespace: String, key_factory: T.nilable(T.proc.params(namespace: ::TypedCache::Namespace, key: String).returns(::TypedCache::CacheKey))).returns(::TypedCache::Namespace) }
|
16
|
+
def nested(namespace, &key_factory); end
|
17
|
+
|
18
|
+
sig { params(namespaces: String, key_factory: T.nilable(T.proc.params(namespace: ::TypedCache::Namespace, key: String).returns(::TypedCache::CacheKey))).returns(::TypedCache::Namespace) }
|
19
|
+
def join(*namespaces, &key_factory); end
|
20
|
+
|
21
|
+
sig { returns(::TypedCache::Namespace) }
|
22
|
+
def parent_namespace; end
|
23
|
+
|
24
|
+
sig { params(key: String).returns(::TypedCache::CacheKey) }
|
25
|
+
def key(key); end
|
26
|
+
|
27
|
+
sig { returns(String) }
|
28
|
+
def to_s; end
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,54 @@
|
|
1
|
+
# typed: strict
|
2
|
+
|
3
|
+
module TypedCache
|
4
|
+
class Snapshot
|
5
|
+
extend T::Generic
|
6
|
+
|
7
|
+
sealed!
|
8
|
+
|
9
|
+
ValueType = type_member(:out)
|
10
|
+
|
11
|
+
sig { returns(::TypedCache::CacheKey) }
|
12
|
+
def key; end
|
13
|
+
|
14
|
+
sig { returns(ValueType) }
|
15
|
+
def value; end
|
16
|
+
|
17
|
+
sig { returns(Time) }
|
18
|
+
def retrieved_at; end
|
19
|
+
|
20
|
+
sig { returns(Symbol) }
|
21
|
+
def source; end
|
22
|
+
|
23
|
+
sig { returns(Float) }
|
24
|
+
def age; end
|
25
|
+
|
26
|
+
sig { returns(T::Boolean) }
|
27
|
+
def from_cache?; end
|
28
|
+
|
29
|
+
sig { returns(T::Boolean) }
|
30
|
+
def computed?; end
|
31
|
+
|
32
|
+
sig { returns(T::Boolean) }
|
33
|
+
def updated?; end
|
34
|
+
|
35
|
+
sig { type_parameters(:T).params(block: T.proc.params(value: ValueType).returns(T.type_parameter(:T))).returns(::TypedCache::Snapshot[T.type_parameter(:T)]) }
|
36
|
+
def map(&block); end
|
37
|
+
|
38
|
+
sig { type_parameters(:T).params(block: T.proc.params(value: ValueType).returns(::TypedCache::Either[Error, T.type_parameter(:T)])).returns(::TypedCache::Either[Error, ::TypedCache::Snapshot[T.type_parameter(:T)]]) }
|
39
|
+
def bind(&block); end
|
40
|
+
|
41
|
+
alias flat_map bind
|
42
|
+
|
43
|
+
class << self
|
44
|
+
sig { type_parameters(:T).params(key: ::TypedCache::CacheKey, value: T.type_parameter(:T)).returns(::TypedCache::Snapshot[T.type_parameter(:T)]) }
|
45
|
+
def cached(key, value); end
|
46
|
+
|
47
|
+
sig { type_parameters(:T).params(key: ::TypedCache::CacheKey, value: T.type_parameter(:T)).returns(::TypedCache::Snapshot[T.type_parameter(:T)]) }
|
48
|
+
def computed(key, value); end
|
49
|
+
|
50
|
+
sig { type_parameters(:T).params(key: ::TypedCache::CacheKey, value: T.type_parameter(:T)).returns(::TypedCache::Snapshot[T.type_parameter(:T)]) }
|
51
|
+
def updated(key, value); end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
@@ -0,0 +1,71 @@
|
|
1
|
+
# typed: strict
|
2
|
+
|
3
|
+
module TypedCache
|
4
|
+
module Store
|
5
|
+
extend T::Generic
|
6
|
+
|
7
|
+
abstract!
|
8
|
+
|
9
|
+
CachedType = type_member
|
10
|
+
|
11
|
+
Error = T.type_alias { TypedCache::Error }
|
12
|
+
Key = T.type_alias { T.any(String, ::TypedCache::CacheKey) }
|
13
|
+
private_constant :Error, :Key
|
14
|
+
|
15
|
+
sig { params(key: Key).returns(::TypedCache::Either[Error, CachedType]) }
|
16
|
+
def read(key); end
|
17
|
+
|
18
|
+
sig { params(keys: T::Array[Key]).returns(::TypedCache::Either[Error, T::Array[::TypedCache::Snapshot[CachedType]]]) }
|
19
|
+
def read_all(keys); end
|
20
|
+
|
21
|
+
sig { params(key: Key, value: CachedType).returns(::TypedCache::Either[Error, ::TypedCache::Snapshot[CachedType]]) }
|
22
|
+
def write(key, value); end
|
23
|
+
|
24
|
+
sig { params(values: T::Hash[Key, CachedType]).returns(::TypedCache::Either[Error, T::Array[::TypedCache::Snapshot[CachedType]]]) }
|
25
|
+
def write_all(values); end
|
26
|
+
|
27
|
+
sig { params(key: Key).returns(::TypedCache::Either[Error, ::TypedCache::Snapshot[CachedType]]) }
|
28
|
+
def delete(key); end
|
29
|
+
|
30
|
+
sig { params(key: Key).returns(::TypedCache::CacheRef[CachedType]) }
|
31
|
+
def ref(key); end
|
32
|
+
|
33
|
+
sig { void }
|
34
|
+
def clear; end
|
35
|
+
|
36
|
+
sig { params(key: Key).returns(T::Boolean) }
|
37
|
+
def key?(key); end
|
38
|
+
|
39
|
+
sig { params(key: Key, block: T.proc.returns(T.nilable(CachedType))).returns(::TypedCache::Either[Error, ::TypedCache::Snapshot[::TypedCache::Maybe[CachedType]]]) }
|
40
|
+
def fetch(key, &block); end
|
41
|
+
|
42
|
+
sig { params(keys: T::Array[Key], block: T.proc.params(key: ::TypedCache::CacheKey).returns(T.nilable(CachedType))).returns(::TypedCache::Either[Error, T::Array[::TypedCache::Snapshot[CachedType]]]) }
|
43
|
+
def fetch_all(keys, &block); end
|
44
|
+
|
45
|
+
sig { returns(::TypedCache::Namespace) }
|
46
|
+
def namespace; end
|
47
|
+
|
48
|
+
sig { params(ns: T.any(::TypedCache::Namespace, String, T::Array[String])).returns(::TypedCache::Store[CachedType]) }
|
49
|
+
def with_namespace(ns); end
|
50
|
+
|
51
|
+
sig { returns(String) }
|
52
|
+
def store_type; end
|
53
|
+
|
54
|
+
sig { returns(T.self_type) }
|
55
|
+
def clone; end
|
56
|
+
|
57
|
+
sig { params(key: Key).returns(::TypedCache::CacheKey) }
|
58
|
+
def namespaced_key(key); end
|
59
|
+
|
60
|
+
sig { returns(::TypedCache::Instrumenter) }
|
61
|
+
def instrumenter; end
|
62
|
+
|
63
|
+
protected
|
64
|
+
|
65
|
+
sig { params(string: String).returns(String) }
|
66
|
+
def snake_case(string); end
|
67
|
+
|
68
|
+
sig { params(namespace: ::TypedCache::Namespace).returns(::TypedCache::Namespace) }
|
69
|
+
def nested_namespace(namespace); end
|
70
|
+
end
|
71
|
+
end
|