I would like to add the ability for Hash#delete to take a splat of arguments that would delete entries at each of the given keys. I've run into this quite a few times where it would be useful in application code. Something like
def preprocess(args = {})
do_some_preprocessing(%i[a b c].zip(args.delete(:a, :b, :c)).to_h)
process(args)
end
Would be very happy to work on a patch for this if it's desired.
Whether to accept a splat (perhaps on an array) at the beginning of an argument is not something to be specified as a method signature.
Your real issue is to let the method accept an arbitrary number of arguments.
Whether you pass the method an array with a splat or you directly pass multiple arguments is solely up to how you use the method in the particular context.
We looked at this issue in yesterday's developer meeting.
While extending Hash#delete is still a valid feature request, it seems to us that the OP wants something different; the example code shows that what is actually wanted is to split a hash into two. That is doable with Hash#delete, but not that intuitive or declarative.
I've attached a patch of what I'm talking about, which should hopefully be more clear. The idea is that you could delete multiple values from a hash at once, which is valuable in its own right. Additionally, the return value is changed to be an array if multiple arguments are passed, representing the deleted values.
This is my first time contributing and I'm not sure if I'm doing everything right, so please any feedback is welcome.