diff --git a/lib/redis.rb b/lib/redis.rb index aaa990a08..8d478e2ac 100644 --- a/lib/redis.rb +++ b/lib/redis.rb @@ -3518,7 +3518,7 @@ def method_missing(command, *args) # rubocop:disable Style/MissingRespondToMissi HashifyStreamEntries = lambda { |reply| reply.compact.map do |entry_id, values| - [entry_id, values.each_slice(2).to_h] + [entry_id, values&.each_slice(2)&.to_h] end } diff --git a/test/lint/streams.rb b/test/lint/streams.rb index a6651ced6..d7060fbb0 100644 --- a/test/lint/streams.rb +++ b/test/lint/streams.rb @@ -491,6 +491,17 @@ def test_xreadgroup_with_invalid_arguments assert_raises(Redis::CommandError) { redis.xreadgroup('g1', 'c1', 's1', %w[> >]) } end + def test_xreadgroup_a_trimmed_entry + redis.xgroup(:create, 'k1', 'g1', '0', mkstream: true) + entry_id = redis.xadd('k1', { value: 'v1' }) + + assert_equal({ 'k1' => [[entry_id, { 'value' => 'v1' }]] }, redis.xreadgroup('g1', 'c1', 'k1', '>')) + assert_equal({ 'k1' => [[entry_id, { 'value' => 'v1' }]] }, redis.xreadgroup('g1', 'c1', 'k1', '0')) + redis.xtrim('k1', 0) + + assert_equal({ 'k1' => [[entry_id, nil]] }, redis.xreadgroup('g1', 'c1', 'k1', '0')) + end + def test_xack_with_a_entry_id redis.xadd('s1', { f: 'v1' }, id: '0-1') redis.xgroup(:create, 's1', 'g1', '$')