class Hashie::Clash
def method_missing(name, *args) #: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