redis-memo 0.1.1 → 1.1.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.
@@ -0,0 +1,49 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Redis memo can be flaky due to transient network errors (e.g. Redis connection errors), or when
4
+ # used with async handlers. This class allows users to override the default redis-memo behavior
5
+ # to be more robust when testing their code that uses redis-memo.
6
+ module RedisMemo
7
+ class Testing
8
+ class << self
9
+ attr_accessor :__test_mode
10
+ end
11
+
12
+ def self.enable_test_mode(&blk)
13
+ __set_test_mode(true, &blk)
14
+ end
15
+
16
+ def self.disable_test_mode(&blk)
17
+ __set_test_mode(false, &blk)
18
+ end
19
+
20
+ def self.enabled?
21
+ __test_mode
22
+ end
23
+
24
+ def self.__set_test_mode(mode, &blk)
25
+ if blk.nil?
26
+ __test_mode = mode
27
+ else
28
+ prev_mode = __test_mode
29
+ begin
30
+ __test_mode = mode
31
+ yield
32
+ ensure
33
+ __test_mode = prev_mode
34
+ end
35
+ end
36
+ end
37
+ end
38
+
39
+ module TestOverrides
40
+ def without_memoization?
41
+ if RedisMemo::Testing.enabled? && !RedisMemo::Memoizable::Invalidation.class_variable_get(:@@invalidation_queue).empty?
42
+ return true
43
+ end
44
+
45
+ super
46
+ end
47
+ end
48
+ singleton_class.prepend(TestOverrides)
49
+ end
@@ -0,0 +1,16 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RedisMemo::ThreadLocalVar
4
+ def self.define(var_name) # :nodoc:
5
+ thread_key = :"__redis_memo_#{var_name}__"
6
+ const_set(var_name.to_s.upcase, thread_key)
7
+
8
+ define_singleton_method var_name do
9
+ Thread.current[thread_key]
10
+ end
11
+
12
+ define_singleton_method "#{var_name}=" do |var_val|
13
+ Thread.current[thread_key] = var_val
14
+ end
15
+ end
16
+ end
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  require_relative 'options'
3
4
 
4
5
  class RedisMemo::Tracer
@@ -0,0 +1,25 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RedisMemo::Util
4
+ def self.checksum(serialized)
5
+ Digest::SHA1.base64digest(serialized)
6
+ end
7
+
8
+ def self.deep_sort_hash(orig_hash)
9
+ {}.tap do |new_hash|
10
+ orig_hash.sort.each do |k, v|
11
+ new_hash[k] = v.is_a?(Hash) ? deep_sort_hash(v) : v
12
+ end
13
+ end
14
+ end
15
+
16
+ def self.tagify_parameterized_sql(sql)
17
+ # replace $1 with ?,
18
+ # and (?, ?, ? ...) with (?)
19
+ sql.gsub(/(\$\d+)/, '?').gsub(/((, *)*\?)+/, '?')
20
+ end
21
+
22
+ def self.uuid
23
+ SecureRandom.uuid
24
+ end
25
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: redis-memo
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 1.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Chan Zuckerberg Initiative
@@ -24,6 +24,20 @@ dependencies:
24
24
  - - ">="
25
25
  - !ruby/object:Gem::Version
26
26
  version: '5.2'
27
+ - !ruby/object:Gem::Dependency
28
+ name: connection_pool
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: 2.2.3
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: 2.2.3
27
41
  - !ruby/object:Gem::Dependency
28
42
  name: redis
29
43
  requirement: !ruby/object:Gem::Requirement
@@ -39,19 +53,19 @@ dependencies:
39
53
  - !ruby/object:Gem::Version
40
54
  version: 4.0.1
41
55
  - !ruby/object:Gem::Dependency
42
- name: connection_pool
56
+ name: ruby2_keywords
43
57
  requirement: !ruby/object:Gem::Requirement
44
58
  requirements:
45
59
  - - ">="
46
60
  - !ruby/object:Gem::Version
47
- version: 2.2.3
61
+ version: '0'
48
62
  type: :runtime
49
63
  prerelease: false
50
64
  version_requirements: !ruby/object:Gem::Requirement
51
65
  requirements:
52
66
  - - ">="
53
67
  - !ruby/object:Gem::Version
54
- version: 2.2.3
68
+ version: '0'
55
69
  - !ruby/object:Gem::Dependency
56
70
  name: activerecord
57
71
  requirement: !ruby/object:Gem::Requirement
@@ -122,6 +136,20 @@ dependencies:
122
136
  - - ">="
123
137
  - !ruby/object:Gem::Version
124
138
  version: '0'
139
+ - !ruby/object:Gem::Dependency
140
+ name: railties
141
+ requirement: !ruby/object:Gem::Requirement
142
+ requirements:
143
+ - - ">="
144
+ - !ruby/object:Gem::Version
145
+ version: '5.2'
146
+ type: :development
147
+ prerelease: false
148
+ version_requirements: !ruby/object:Gem::Requirement
149
+ requirements:
150
+ - - ">="
151
+ - !ruby/object:Gem::Version
152
+ version: '5.2'
125
153
  - !ruby/object:Gem::Dependency
126
154
  name: rake
127
155
  requirement: !ruby/object:Gem::Requirement
@@ -150,6 +178,48 @@ dependencies:
150
178
  - - "~>"
151
179
  - !ruby/object:Gem::Version
152
180
  version: '3.2'
181
+ - !ruby/object:Gem::Dependency
182
+ name: rubocop
183
+ requirement: !ruby/object:Gem::Requirement
184
+ requirements:
185
+ - - ">="
186
+ - !ruby/object:Gem::Version
187
+ version: '0'
188
+ type: :development
189
+ prerelease: false
190
+ version_requirements: !ruby/object:Gem::Requirement
191
+ requirements:
192
+ - - ">="
193
+ - !ruby/object:Gem::Version
194
+ version: '0'
195
+ - !ruby/object:Gem::Dependency
196
+ name: rubocop-performance
197
+ requirement: !ruby/object:Gem::Requirement
198
+ requirements:
199
+ - - ">="
200
+ - !ruby/object:Gem::Version
201
+ version: '0'
202
+ type: :development
203
+ prerelease: false
204
+ version_requirements: !ruby/object:Gem::Requirement
205
+ requirements:
206
+ - - ">="
207
+ - !ruby/object:Gem::Version
208
+ version: '0'
209
+ - !ruby/object:Gem::Dependency
210
+ name: rubocop-rspec
211
+ requirement: !ruby/object:Gem::Requirement
212
+ requirements:
213
+ - - ">="
214
+ - !ruby/object:Gem::Version
215
+ version: '0'
216
+ type: :development
217
+ prerelease: false
218
+ version_requirements: !ruby/object:Gem::Requirement
219
+ requirements:
220
+ - - ">="
221
+ - !ruby/object:Gem::Version
222
+ version: '0'
153
223
  - !ruby/object:Gem::Dependency
154
224
  name: simplecov
155
225
  requirement: !ruby/object:Gem::Requirement
@@ -176,8 +246,10 @@ files:
176
246
  - lib/redis_memo/batch.rb
177
247
  - lib/redis_memo/cache.rb
178
248
  - lib/redis_memo/connection_pool.rb
249
+ - lib/redis_memo/errors.rb
179
250
  - lib/redis_memo/future.rb
180
251
  - lib/redis_memo/memoizable.rb
252
+ - lib/redis_memo/memoizable/bump_version.lua
181
253
  - lib/redis_memo/memoizable/dependency.rb
182
254
  - lib/redis_memo/memoizable/invalidation.rb
183
255
  - lib/redis_memo/memoize_method.rb
@@ -191,8 +263,12 @@ files:
191
263
  - lib/redis_memo/memoize_query/model_callback.rb
192
264
  - lib/redis_memo/middleware.rb
193
265
  - lib/redis_memo/options.rb
266
+ - lib/redis_memo/railtie.rb
194
267
  - lib/redis_memo/redis.rb
268
+ - lib/redis_memo/testing.rb
269
+ - lib/redis_memo/thread_local_var.rb
195
270
  - lib/redis_memo/tracer.rb
271
+ - lib/redis_memo/util.rb
196
272
  homepage: https://github.com/chanzuckerberg/redis-memo
197
273
  licenses:
198
274
  - MIT