Quacks like a Hash, but contains one additional method (commit) to help you merge changes from child hashes.

Typical usage:

require 'rubygems'
require 'sonofhash'

parent = SonOfHash.new
child = parent.new_child

parent['name'] = 'Moondublin'
puts child['name']            # Moondublin

child['name'] = 'Lugrat'
puts parent['name']           # Moondublin

child.commit
puts parent['name']           # Lugrat