class Hashie::Clash

def method_missing(name, *args) #:nodoc:

:nodoc:
def method_missing(name, *args) #:nodoc:
  name = name.to_s
  if name.match(/!$/) && args.empty?
    key = name[0...-1].to_sym
    
    if self[key].nil?
      self[key] = Clash.new({}, self)
    elsif self[key].is_a?(::Hash) && !self[key].is_a?(Clash)
      self[key] = Clash.new(self[key], self)
    else
      raise ChainError, "Tried to chain into a non-hash key."
    end
    
    self[key]
  elsif args.any?
    key = name.to_sym
    self.merge_store(key, *args)
  end
end