class Hash def self.recursive new do |hash, key| hash[key] = recursive end end def symbolize_keys reduce({}) do |memo, (key, value)| memo.merge! key.to_sym => value end end def sort_with_keys sort.to_h.tap do |hash| hash.each_pair do |key, value| hash.merge! key => value.sort_with_keys if value.is_a?(Hash) end end end end