require 'common/domain' require 'common/errors' class User # A class representing a syntactically valid user; that is, an email # address. Once constructed, you can be sure that it's valid. @localpart = nil @domain = nil def domain() return @domain end def domainpart() return @domain.to_s() end def initialize(username) # Initialize this user object, but throw an error if either the # localpart or domainpart are invalid. The one argument is an # email address string. if not username.is_a?(String) msg = 'username must be a String ' msg += "but a #{username.class.to_s()} was given" raise InvalidUserError.new(msg) end parts = username.split('@') if parts.length() < 2 then msg = "the username #{username} does not contain an '@' symbol" raise InvalidUserError.new(msg) end localpart = parts[0] if localpart.length() > 64 then msg = "the local part of #{username} cannot have more than 64 characters" raise InvalidUserError(msg) end if localpart.empty? then msg = "the local part of #{username} cannot be empty" raise InvalidUserError.new(msg) end @localpart = localpart @domain = Domain.new(parts[1]) end def localpart() return @localpart end def to_s() return @localpart + '@' + @domain.to_s() end def ==(other) return self.to_s() == other.to_s() end def <=>(other) return self.to_s() <=> other.to_s() end end