readthis 1.5.0 → 2.0.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: d99b745b536b4761198212736eba995173cf7dd0
4
- data.tar.gz: fb66dd2f67cc90114ad5037ea10b684722d6d468
3
+ metadata.gz: e16646d64b4ceca02395a09548e24ecea98acc2f
4
+ data.tar.gz: 450ed32fe1925d4bee3f6b1fa43503305c7210ad
5
5
  SHA512:
6
- metadata.gz: 992a39d5b3c6fde1796dbd8ac8dc8c03aa44cd79152a15e6b1ca553327d4dec95f754ddb68a2275aa636d75d13658e43b712ebd95ae4b49ae21f6a164ad66b87
7
- data.tar.gz: e5521f55739341901c7bbe6d9743127686643ca44cb82bf338f046a81fd16a522f364ee757e5f548f3ed9c647b495904c0faa1144470e47f4610f510cebc23e1
6
+ metadata.gz: 456a017c4ceacfb887523a018fff2c2093acff21ddb9fb105e25e408781cb5a8b00b9c455c27f6fec18a8a2c2bc0a2320e8610744471048830dacb273df275c3
7
+ data.tar.gz: 5061eac72e442c3f235b22719bd3c2bc824b71e4a5add63a6b13cba4ebce8ca8d16ff76593ea9f218e3a231a73ab681dc44fa2dc00eef161d6de4ff97a0943c7
@@ -19,21 +19,32 @@ module Readthis
19
19
 
20
20
  # Creates a new Readthis::Cache object with the given options.
21
21
  #
22
- # @option options [Hash] :redis Options that will be passed to the redis connection
23
- # @option options [Boolean] :compress (false) Enable or disable automatic compression
24
- # @option options [Number] :compression_threshold (8k) Minimum string size for compression
25
- # @option options [Number] :expires_in The number of seconds until an entry expires
26
- # @option options [Boolean] :refresh (false) Automatically refresh key expiration
27
- # @option options [Module] :marshal (Marshal) Module that responds to `dump` and `load`
28
- # @option options [String] :namespace Prefix used to namespace entries
29
- # @option options [Number] :pool_size (5) The number of threads in the pool
30
- # @option options [Number] :pool_timeout (5) How long before a thread times out
22
+ # @option options [Hash] :redis Options that will be passed to the redis
23
+ # connection
24
+ # @option options [Boolean] :compress (false) Enable or disable automatic
25
+ # compression
26
+ # @option options [Number] :compression_threshold (8k) Minimum string size
27
+ # for compression
28
+ # @option options [Number] :expires_in The number of seconds until an entry
29
+ # expires
30
+ # @option options [Boolean] :refresh (false) Automatically refresh key
31
+ # expiration
32
+ # @option options [Boolean] :retain_nils (false) Whether nil values should
33
+ # be included in read_multi output
34
+ # @option options [Module] :marshal (Marshal) Module that responds to
35
+ # `dump` and `load`
36
+ # @option options [String] :namespace Prefix used to namespace entries
37
+ # @option options [Number] :pool_size (5) The number of threads in the pool
38
+ # @option options [Number] :pool_timeout (5) How long before a thread times
39
+ # out
31
40
  #
32
41
  # @example Create a new cache instance
42
+ #
33
43
  # Readthis::Cache.new(namespace: 'cache',
34
44
  # redis: { url: 'redis://localhost:6379/0' })
35
45
  #
36
46
  # @example Create a compressed cache instance
47
+ #
37
48
  # Readthis::Cache.new(compress: true, compression_threshold: 2048)
38
49
  #
39
50
  def initialize(options = {})
@@ -246,19 +257,20 @@ module Readthis
246
257
  end
247
258
  end
248
259
 
249
- # Read multiple values at once from the cache. Options can be passed in the
250
- # last argument.
260
+ # Efficiently read multiple values at once from the cache. Options can be
261
+ # passed in the last argument.
251
262
  #
252
263
  # @overload read_multi(keys)
253
264
  # Return all values for the given keys.
254
265
  # @param [String] One or more keys to fetch
266
+ # @param [Hash] options Configuration to override
255
267
  #
256
268
  # @return [Hash] A hash mapping keys to the values found.
257
269
  #
258
270
  # @example
259
271
  #
260
- # cache.write('a', 1)
261
- # cache.read_multi('a', 'b') # => { 'a' => 1, 'b' => nil }
272
+ # cache.read_multi('a', 'b') # => { 'a' => 1 }
273
+ # cache.read_multi('a', 'b', retain_nils: true) # => { 'a' => 1, 'b' => nil }
262
274
  #
263
275
  def read_multi(*keys)
264
276
  options = merged_options(extract_options!(keys))
@@ -271,7 +283,7 @@ module Readthis
271
283
 
272
284
  refresh_entity(mapping, store, options)
273
285
 
274
- keys.zip(values).to_h
286
+ values_to_hash(keys, values, options)
275
287
  end
276
288
  end
277
289
 
@@ -318,9 +330,9 @@ module Readthis
318
330
  # end
319
331
  #
320
332
  def fetch_multi(*keys)
321
- results = read_multi(*keys)
322
- extracted = extract_options!(keys)
323
- missing = {}
333
+ options = extract_options!(keys).merge(retain_nils: true)
334
+ results = read_multi(*keys, options)
335
+ missing = {}
324
336
 
325
337
  invoke(:fetch_multi, keys) do |_store|
326
338
  results.each do |key, value|
@@ -332,7 +344,7 @@ module Readthis
332
344
  end
333
345
  end
334
346
 
335
- write_multi(missing, extracted) if missing.any?
347
+ write_multi(missing, options) if missing.any?
336
348
 
337
349
  results
338
350
  end
@@ -426,6 +438,14 @@ module Readthis
426
438
  @options.merge(options || {})
427
439
  end
428
440
 
441
+ def zipped_results(keys, values, options)
442
+ zipped = keys.zip(values)
443
+
444
+ zipped.select! { |(_, value)| value } unless options[:retain_nils]
445
+
446
+ zipped.to_h
447
+ end
448
+
429
449
  def pool_options(options)
430
450
  { size: options.fetch(:pool_size, 5),
431
451
  timeout: options.fetch(:pool_timeout, 5) }
@@ -1,3 +1,3 @@
1
1
  module Readthis
2
- VERSION = '1.5.0'.freeze
2
+ VERSION = '2.0.0'.freeze
3
3
  end
@@ -210,14 +210,25 @@ RSpec.describe Readthis::Cache do
210
210
  cache.write('a', 1)
211
211
  cache.write('b', 2)
212
212
  cache.write('c', '3')
213
+ cache.write('d', nil)
213
214
 
214
- expect(cache.read_multi('a', 'b', 'c')).to eq(
215
+ expect(cache.read_multi('a', 'b', 'c', 'd')).to eq(
215
216
  'a' => 1,
216
217
  'b' => 2,
217
218
  'c' => '3'
218
219
  )
219
220
  end
220
221
 
222
+ it 'can be configured to retain keys with nil values' do
223
+ cache.write('a', nil)
224
+ cache.write('b', nil)
225
+
226
+ expect(cache.read_multi('a', 'b', retain_nils: true)).to eq(
227
+ 'a' => nil,
228
+ 'b' => nil
229
+ )
230
+ end
231
+
221
232
  it 'respects namespacing' do
222
233
  cache.write('d', 1, namespace: 'cache')
223
234
  cache.write('e', 2, namespace: 'cache')
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: readthis
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.5.0
4
+ version: 2.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Parker Selbert
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-07-18 00:00:00.000000000 Z
11
+ date: 2016-07-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: redis