Ruby dup / clone recursivamente

Tengo un hash como:

h = {'name' => 'sayuj', 
     'age' => 22, 
     'project' => {'project_name' => 'abc', 
                   'duration' => 'prq'}}

Necesito un duplicado de este hash, el cambio no debería afectar el hash original.

Cuando lo intento,

d = h.dup # or d = h.clone
d['name'] = 'sayuj1'
d['project']['duration'] = 'xyz'

p d #=> {"name"=>"sayuj1", "project"=>{"duration"=>"xyz", "project_name"=>"abc"}, "age"=>22}
p h #=> {"name"=>"sayuj", "project"=>{"duration"=>"xyz", "project_name"=>"abc"}, "age"=>22}

Aquí puedes ver elproject['duration'] se cambia en el hash original porqueproject es otro objeto hash.

Quiero que el hash seaduped ocloned recursivamente. ¿Cómo puedo conseguir esto

Respuestas a la pregunta(10)

Su respuesta a la pregunta