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
      fail ChainError, 'Tried to chain into a non-hash key.'
    end
    self[key]
  elsif args.any?
    key = name.to_sym
    merge_store(key, *args)
  end
end