Add support HashWithIndifferentAccess to Hash#extract!

Hello there! I propose to add support for class objects HashWithIndifferentAccess to method Hash#extract!:

before:

def extract!(*keys)

keys.each_with_object(self.class.new) { |key, result| result[key] = delete(key) if has_key?(key) }

end

after:

def extract!(*keys)

keys.map! { |key| convert_key(key) } if respond_to?(:convert_key, true)

keys.each_with_object(self.class.new) { |key, result| result[key] = delete(key) if has_key?(key) }

end

Thanks!

HashWithIndifferentAccess is EXTREMELY expensive. For some background I did a write up on Hashie, another object that inherits from Hash http://www.schneems.com/2014/12/15/hashie-considered-harmful.html

Several of the problems that apply to hashie also apply to HWIA. Basically any subclass of Hash is going to be slow. Here’s an issue I opened in Rack which is closer to HWIA https://github.com/rack/rack/issues/738.