def method_missing(method_symbol, *args, &block)
      key = method_symbol.to_s
      set = key.chomp!('=')
      if set
        self[key] = args.first
      elsif self.key?(key)
        self[key]
      else
        nil
      end
    end
def method_missing(method_symbol, *args, &block)
      key = method_symbol.to_s
      set = key.chomp!('=')
      if set
        self[key] = args.first
      elsif self.key?(key)
        self[key]
      else
        nil
      end
    end
Allow method call syntax: h.foo.bar.baz == h['foo']['bar']['baz'].

 Accessing hash keys whose names overlap with names of Ruby Object
 built-in methods (id, type, etc.) will still need to be passed in
 with bracket notation (h['type'] instead of h.type).