diff --git a/lab2/person.rb b/lab2/person.rb index 7fc8dad..3a6fdad 100644 --- a/lab2/person.rb +++ b/lab2/person.rb @@ -1,62 +1,42 @@ +require_relative 'contact' + class Person attr_accessor :id, :git + attr_reader :contact - def initialize(args = {}) - @id = args[:id] || nil - @git = args[:git] - - raise ArgumentError, "Git link is required" unless git_present? - raise ArgumentError, "At least one contact (phone, telegram, or email) is required" unless contact_present? - end - - def set_contacts(phone: nil, telegram: nil, email: nil) - @phone = phone - raise ArgumentError, "Invalid phone number format: #{@phone}" if @phone && !self.class.valid_phone_number?(@phone) - - @telegram = telegram - raise ArgumentError, "Invalid telegram format: #{@telegram}" if @telegram && !self.class.valid_telegram?(@telegram) + def initialize(id:, git:, contact: Contact.new) + @id = id + @git = git + @contact = contact - @email = email - raise ArgumentError, "Invalid email format: #{@email}" if @email && !self.class.valid_email?(@email) + validate_person end - def self.valid_phone_number?(phone) - phone.match?(/\A\+?[0-9]{10,15}\z/) - end - - def self.valid_name?(name) - name.match?(/\A[А-Яа-яЁёA-Za-z\-]+\z/) + def git_present? + !@git.nil? && !@git.empty? end - def self.valid_telegram?(telegram) - telegram.nil? || telegram.match?(/\A@[A-Za-z0-9_]{5,32}\z/) + def contact_present? + @contact.present? end - def self.valid_email?(email) - email.nil? || email.match?(/\A[^@\s]+@[^@\s]+\.[^@\s]+\z/) + def contact_info + @contact.info end def self.valid_git?(git) - git.nil? || git.match?(/\Ahttps:\/\/github\.com\/[A-Za-z0-9_\-]+\z/) - end - - def git_present? - !@git.nil? && !@git.empty? + /\Ahttps:\/\/github\.com\/[A-Za-z0-9_\-]+\z/.match?(git) end - def contact_present? - !(@phone.nil? || @phone.empty?) || !(@telegram.nil? || @telegram.empty?) || !(@email.nil? || @email.empty?) - end - - def contact_info - return "Phone: #{@phone}" if @phone - return "Telegram: #{@telegram}" if @telegram - return "Email: #{@email}" if @email - 'No contact available' + def self.valid_id?(id) + id.is_a?(String) && !id.strip.empty? end private - attr_reader :phone, :telegram, :email - attr_writer :phone, :telegram, :email -end \ No newline at end of file + def validate_person + raise ArgumentError, 'ID is required and must be a non-empty string' unless self.class.valid_id?(@id) + raise ArgumentError, 'Git link is required' unless git_present? + raise ArgumentError, 'Invalid Git link format' unless self.class.valid_git?(@git) + end +end