class Hashie::Clash

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

:nodoc:
def method_missing(name, *args) #:nodoc:
  if args.empty? && name.to_s.end_with?('!')
    key = name[0...-1].to_sym
    case self[key]
    when NilClass
      self[key] = self.class.new({}, self)
    when Clash
      self[key]
    when Hash
      self[key] = self.class.new(self[key], self)
    else
      fail ChainError, 'Tried to chain into a non-hash key.'
    end
  elsif args.any?
    merge_store(name, *args)
  else
    super
  end
end