Please do PR. This is a delicate behavior change, so let’s take care that the hashes are indeed separate objects, defaults are preserved correctly, etc.
Hi, Jeremy.
It seemed to be a good idea, but then I realized that it is actually not that good.
Because:
h={'test' => 123, ttt: 1234} # => {"test"=>123, :ttt=>1234}
h=h.with_indifferent_access # => {"test"=>123, "ttt"=>1234}
h.except(:ttt) # => {"test"=>123}
h.except2(:ttt) # => {"test"=>123, "ttt"=>1234}
As we can see, except2 method has different behaviour then except method. However I think I can fix it.
class HashWithIndifferentAccess < Hash def except2(keys ) dup.except!( keys) end end h={‘test’ => 123, ttt: 1234} # => {“test”=>123, :ttt=>1234} h=h.with_indifferent_access # => {“test”=>123, “ttt”=>1234} h.except(:ttt) # => {“test”=>123} h.except2(:ttt) # => {“test”=>123}
What do you think about it?
Regards, Dmitry.
Good catch. Do we have test coverage for these cases already?
I have found “test_deep_merge_on_indifferent_access”. However there is no test for except method for these cases.