# File lib/addressable/uri.rb, line 879
    def authority=(new_authority)
      # Check for frozenness
      raise TypeError, "Can't modify frozen URI." if self.frozen?

      if new_authority
        new_authority = new_authority.to_str
        new_userinfo = new_authority[/^([^\[\]]*)@/, 1]
        if new_userinfo
          new_user = new_userinfo.strip[/^([^:]*):?/, 1]
          new_password = new_userinfo.strip[/:(.*)$/, 1]
        end
        new_host =
          new_authority.gsub(/^([^\[\]]*)@/, "").gsub(/:([^:@\[\]]*?)$/, "")
        new_port =
          new_authority[/:([^:@\[\]]*?)$/, 1]
      end

      # Password assigned first to ensure validity in case of nil
      self.password = new_password
      self.user = new_user
      self.host = new_host
      self.port = new_port

      # Reset dependant values
      @inferred_port = nil
      @userinfo = nil
      @normalized_userinfo = nil
      @uri_string = nil

      # Ensure we haven't created an invalid URI
      validate()
    end