diff --git a/lib/redis/pipeline.rb b/lib/redis/pipeline.rb index 0e415aa9..99eaf101 100644 --- a/lib/redis/pipeline.rb +++ b/lib/redis/pipeline.rb @@ -118,12 +118,14 @@ def initialize(futures) end def _set(replies) - if replies - @futures.each_with_index do |future, index| + @object = if replies + @futures.map.with_index do |future, index| future._set(replies[index]) + future.value end + else + replies end - @object = replies end end end diff --git a/test/redis/pipelining_commands_test.rb b/test/redis/pipelining_commands_test.rb index 6265921a..92417ac7 100644 --- a/test/redis/pipelining_commands_test.rb +++ b/test/redis/pipelining_commands_test.rb @@ -239,6 +239,23 @@ def test_zpopmax_in_a_pipeline_produces_future assert_equal ["value", 1.0], future.value end + def test_hgetall_in_a_multi_in_a_pipeline_returns_hash + future = nil + result = r.pipelined do |p| + p.multi do |m| + m.hmset("hash", "field", "value", "field2", "value2") + future = m.hgetall("hash") + end + end + + if Gem::Version.new(Redis::VERSION) > Gem::Version.new("4.8") + result = result.last + end + + assert_equal({ "field" => "value", "field2" => "value2" }, result.last) + assert_equal({ "field" => "value", "field2" => "value2" }, future.value) + end + def test_keys_in_a_pipeline r.set("key", "value") result = r.pipelined do |p|