redis 4.2.1 → 4.2.2

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: 1e49d4c950b40f5d702b9b49bfc16b6af12dba334f5866dfd44f1ff69af55ecc
4
- data.tar.gz: bf025908a9697cb0308aa3cbce20ecd292a5d9d801c53ad89f739ca5e5beb74f
3
+ metadata.gz: 28eb23d20152436fc47f334f517c6fa62855e8e4711b44979cb05d86f8dcdd34
4
+ data.tar.gz: 46d01b3f5539800142582aeb7ebeabe4327bce970e31ce2048dcba027dfe6eb1
5
5
  SHA512:
6
- metadata.gz: b27b0178a9120d2843017f5b153dfd48f668ad6b56058bc1058cc318034f1715491cbc9557d71459588b4d3c17970f2572efffd1e79523069ebc4bc208b1c193
7
- data.tar.gz: e6ec5a2f2d49bebdef37531d0292f1076bde4ec81adc190eae122d972bb8b9d46354c78c1fc2d1340d392d5805b42a63409bf6fe4cd020c1176a31ed249bc450
6
+ metadata.gz: f2f11269c6a3a030231eeb93dfa6bee54b340ff5ad244df6d79074c95f111e3d2081f49f77756576cb8225640e8b8cad144884c8519bcf1b0e7bedea3ca1b00f
7
+ data.tar.gz: 44ec06531632060b497cf1d02e6678c3d087ec3371cba86f53f9687848f73bb4e02c166b11d4db9e6b531b62ba2ca830649d71114063560f6dd764ca2ef10f07
@@ -1,5 +1,10 @@
1
1
  # Unreleased
2
2
 
3
+ # 4.2.2
4
+
5
+ * Fix `WATCH` support for `Redis::Distributed`. See #941.
6
+ * Fix handling of empty stream responses. See #905, #929.
7
+
3
8
  # 4.2.1
4
9
 
5
10
  * Fix `exists?` returning an actual boolean when called with multiple keys. See #918.
@@ -17,6 +22,7 @@
17
22
  * Optimized initialization of Redis::Cluster. See #912.
18
23
  * Accept sentinel options even with string key. See #599.
19
24
  * Verify TLS connections by default. See #900.
25
+ * Make `Redis#hset` variadic. It now returns an integer, not a boolean. See #910.
20
26
 
21
27
  # 4.1.4
22
28
 
@@ -3423,8 +3423,11 @@ class Redis
3423
3423
  end
3424
3424
  }
3425
3425
 
3426
+ EMPTY_STREAM_RESPONSE = [nil].freeze
3427
+ private_constant :EMPTY_STREAM_RESPONSE
3428
+
3426
3429
  HashifyStreamEntries = lambda { |reply|
3427
- reply.map do |entry_id, values|
3430
+ reply.compact.map do |entry_id, values|
3428
3431
  [entry_id, values.each_slice(2).to_h]
3429
3432
  end
3430
3433
  }
@@ -24,10 +24,14 @@ class Redis
24
24
  @default_options = options.dup
25
25
  node_configs.each { |node_config| add_node(node_config) }
26
26
  @subscribed_node = nil
27
+ @watch_key = nil
27
28
  end
28
29
 
29
30
  def node_for(key)
30
- @ring.get_node(key_tag(key.to_s) || key.to_s)
31
+ key = key_tag(key.to_s) || key.to_s
32
+ raise CannotDistribute, :watch if @watch_key && @watch_key != key
33
+
34
+ @ring.get_node(key)
31
35
  end
32
36
 
33
37
  def nodes
@@ -799,13 +803,26 @@ class Redis
799
803
  end
800
804
 
801
805
  # Watch the given keys to determine execution of the MULTI/EXEC block.
802
- def watch(*_keys)
803
- raise CannotDistribute, :watch
806
+ def watch(*keys, &block)
807
+ ensure_same_node(:watch, keys) do |node|
808
+ @watch_key = key_tag(keys.first) || keys.first.to_s
809
+
810
+ begin
811
+ node.watch(*keys, &block)
812
+ rescue StandardError
813
+ @watch_key = nil
814
+ raise
815
+ end
816
+ end
804
817
  end
805
818
 
806
819
  # Forget about all watched keys.
807
820
  def unwatch
808
- raise CannotDistribute, :unwatch
821
+ raise CannotDistribute, :unwatch unless @watch_key
822
+
823
+ result = node_for(@watch_key).unwatch
824
+ @watch_key = nil
825
+ result
809
826
  end
810
827
 
811
828
  def pipelined
@@ -813,18 +830,30 @@ class Redis
813
830
  end
814
831
 
815
832
  # Mark the start of a transaction block.
816
- def multi
817
- raise CannotDistribute, :multi
833
+ def multi(&block)
834
+ raise CannotDistribute, :multi unless @watch_key
835
+
836
+ result = node_for(@watch_key).multi(&block)
837
+ @watch_key = nil if block_given?
838
+ result
818
839
  end
819
840
 
820
841
  # Execute all commands issued after MULTI.
821
842
  def exec
822
- raise CannotDistribute, :exec
843
+ raise CannotDistribute, :exec unless @watch_key
844
+
845
+ result = node_for(@watch_key).exec
846
+ @watch_key = nil
847
+ result
823
848
  end
824
849
 
825
850
  # Discard all commands issued after MULTI.
826
851
  def discard
827
- raise CannotDistribute, :discard
852
+ raise CannotDistribute, :discard unless @watch_key
853
+
854
+ result = node_for(@watch_key).discard
855
+ @watch_key = nil
856
+ result
828
857
  end
829
858
 
830
859
  # Control remote script registry.
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  class Redis
4
- VERSION = '4.2.1'
4
+ VERSION = '4.2.2'
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: redis
3
3
  version: !ruby/object:Gem::Version
4
- version: 4.2.1
4
+ version: 4.2.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ezra Zygmuntowicz
@@ -13,10 +13,10 @@ authors:
13
13
  - Michel Martens
14
14
  - Damian Janowski
15
15
  - Pieter Noordhuis
16
- autorequire:
16
+ autorequire:
17
17
  bindir: bin
18
18
  cert_chain: []
19
- date: 2020-06-11 00:00:00.000000000 Z
19
+ date: 2020-09-07 00:00:00.000000000 Z
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency
22
22
  name: em-synchrony
@@ -102,10 +102,10 @@ licenses:
102
102
  metadata:
103
103
  bug_tracker_uri: https://github.com/redis/redis-rb/issues
104
104
  changelog_uri: https://github.com/redis/redis-rb/blob/master/CHANGELOG.md
105
- documentation_uri: https://www.rubydoc.info/gems/redis/4.2.1
105
+ documentation_uri: https://www.rubydoc.info/gems/redis/4.2.2
106
106
  homepage_uri: https://github.com/redis/redis-rb
107
- source_code_uri: https://github.com/redis/redis-rb/tree/v4.2.1
108
- post_install_message:
107
+ source_code_uri: https://github.com/redis/redis-rb/tree/v4.2.2
108
+ post_install_message:
109
109
  rdoc_options: []
110
110
  require_paths:
111
111
  - lib
@@ -120,8 +120,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
120
120
  - !ruby/object:Gem::Version
121
121
  version: '0'
122
122
  requirements: []
123
- rubygems_version: 3.0.4
124
- signing_key:
123
+ rubygems_version: 3.1.2
124
+ signing_key:
125
125
  specification_version: 4
126
126
  summary: A Ruby client library for Redis
127
127
  test_files: []