/
polina_2025
/
labruby
Обзор
Документация
Войти
/
polina_2025
/
labruby
Код
Запросы
4
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
lab5
lab3/input_modules.rb
192 строки
5 KB
Polina_2025
lab3
01 июн 2026, 12:53
01 июн 2026, 12:53
b97fcf2
Код
Авторство
О чём код?
require_relative 'student' module InputValidator def self.valid_student_count?(count) count.is_a?(Integer) && count > 0 end def self.valid_skill_name?(name) return false if name.empty? return false if name.length > 30 name.match?(/\A[а-яА-Яa-zA-Z0-9\-]+\z/) end def self.valid_skill_level?(level) return false if level.empty? level.length <= 100 end def self.get_skills_count skills_count_input = gets.chomp.strip if skills_count_input.empty? || skills_count_input == "0" return 0 end skills_count = skills_count_input.to_i if skills_count <= 0 puts " Ошибка: количество навыков должно быть положительным числом" return nil end skills_count end end module InputHandler def self.input_name loop do print "Имя (от #{Student::MIN_NAME_LENGTH} до #{Student::MAX_NAME_LENGTH} символов, только буквы, пробелы и дефисы): " name = gets.chomp.strip temp_student = Student.new( name: name, age: 1, gender: :male, group: "temp", email: "temp@example.com", skills: {} ) if temp_student.valid_name_length? && temp_student.valid_name_format? return name else temp_student.valid_name_length? temp_student.valid_name_format? temp_student.print_errors end end end def self.input_age loop do print "Возраст (от #{Student::MIN_AGE} до #{Student::MAX_AGE} лет): " age = gets.chomp.to_i temp_student = Student.new( name: "temp", age: age, gender: :male, group: "temp", email: "temp@example.com", skills: {} ) if temp_student.valid_age? return age else temp_student.valid_age? temp_student.print_errors end end end def self.input_gender loop do print "Пол (male/female): " gender_input = gets.chomp.downcase.strip gender = gender_input.to_sym temp_student = Student.new( name: "temp", age: 1, gender: gender, group: "temp", email: "temp@example.com", skills: {} ) if temp_student.valid_gender? return gender else temp_student.valid_gender? temp_student.print_errors end end end def self.input_group loop do print "Группа (от 2 до 20 символов): " group = gets.chomp.strip temp_student = Student.new( name: "temp", age: 1, gender: :male, group: group, email: "temp@example.com", skills: {} ) if temp_student.valid_group? return group else temp_student.valid_group? temp_student.print_errors end end end def self.input_email loop do print "Электронная почта (должна содержать @ и .): " email = gets.chomp.strip temp_student = Student.new( name: "temp", age: 1, gender: :male, group: "temp", email: email, skills: {} ) if temp_student.valid_email? return email else temp_student.valid_email? temp_student.print_errors end end end def self.input_skills skills = {} print "Сколько навыков хотите добавить? (0 или Enter - пропустить): " skills_count = InputValidator.get_skills_count if skills_count.nil? return input_skills end if skills_count == 0 puts " Навыки не добавлены" return skills end puts " Введите #{skills_count} навык(а/ов):" (1..skills_count).each do |skill_number| puts " Навык #{skill_number}:" skill_name = input_skill_name skill_level = input_skill_level(skill_name) skills[skill_name] = skill_level end skills end private def self.input_skill_name loop do print " Название: " skill_name_input = gets.chomp.strip if !InputValidator.valid_skill_name?(skill_name_input) puts " Ошибка: название навыка должно состоять из букв, цифр и дефисов (макс. 30 символов)" else return skill_name_input.to_sym end end end def self.input_skill_level(skill_name) loop do print " Уровень (описание): " skill_level = gets.chomp.strip if !InputValidator.valid_skill_level?(skill_level) puts " Ошибка: уровень навыка не может быть пустым (макс. 100 символов)" else return skill_level end end end end