Replacing Hash#delete with Hash#fetch

Instead of using the destructive #delete and validation of the hash
size, prefer #fetch and #assert_valid_keys. This ensures that the
input, which could be reused, is not obliterated.

For example if you use Rails Object#with_options the delete could
unexpected consequences.

http://api.rubyonrails.org/classes/Object.html#method-i-with_options

@TODO?

Is the assert_valid_keys necessary? API found:

http://api.rubyonrails.org/classes/Hash.html#method-i-assert_valid_keys