diff --git a/lib/kredis/types/hash.rb b/lib/kredis/types/hash.rb index 5b76f47..b441a19 100644 --- a/lib/kredis/types/hash.rb +++ b/lib/kredis/types/hash.rb @@ -18,7 +18,7 @@ def []=(key, value) end def update(**entries) - hset entries.transform_values { |val| type_to_string(val, typed) } if entries.flatten.any? + hset entries.transform_values { |val| type_to_string(val, typed) }.compact if entries.flatten.any? end def values_at(*keys) diff --git a/test/types/hash_test.rb b/test/types/hash_test.rb index 8f7bf01..ef1f0de 100644 --- a/test/types/hash_test.rb +++ b/test/types/hash_test.rb @@ -124,4 +124,10 @@ class HashTest < ActiveSupport::TestCase @hash = Kredis.hash "myhash", typed: :integer, default: ->() { { space_invaders: "100", pong: "42" } } assert_equal({ "space_invaders" => 100, "pong" => 42 }, @hash.to_h) end + + test "handles nil values gracefully" do + @hash.update("key" => nil, "key2" => "value2") + assert_nil @hash["key"] + assert_equal "value2", @hash["key2"] + end end