require_relative 'contact' class Person attr_reader :id, :git, :contact def initialize(id:, git:, contact: Contact.new) validate_id(id) validate_contact(contact) @id = id @git = git @contact = contact end def git_present? !@git.nil? && !@git.empty? end def contact_present? @contact.present? end def contact_info @contact.get_single_contact end def self.valid_git?(git) /\Ahttps:\/\/github\.com\/[A-Za-z0-9_\-]+\z/.match?(git) end def self.valid_id?(id) id.is_a?(String) && !id.strip.empty? end def git=(git) validate_git(git) @git = git end private def validate_id(id) raise ArgumentError, 'ID is required and must be a non-empty string' unless self.class.valid_id?(id) end def validate_git(git) raise ArgumentError, 'Git link is required' if git.nil? || git.strip.empty? raise ArgumentError, 'Invalid Git link format' unless self.class.valid_git?(git) end def validate_contact(contact) raise ArgumentError, 'Contact must be a valid Contact object' unless contact.is_a?(Contact) raise ArgumentError, 'Contact must have at least one valid field' unless contact.present? end end