/
J33K77
/
cdg_ruby
Обзор
Документация
Войти
/
J33K77
/
cdg_ruby
Код
Запросы
1
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
Student.rb
109 строк
3 KB
J33K77
lab3 updated
12 май 2026, 18:16
12 май 2026, 18:16
a8827f6
Код
Авторство
О чём код?
class Student # Константы для валидации NAME_REGEX = /^[a-zA-Zа-яА-ЯёЁ\s]+$/ EMAIL_REGEX = /\A[\w+\-.]+@[a-z\d\-.]+\.[a-z]+\z/i GENDERS = [:male, :female].freeze MIN_AGE = 1 MAX_AGE = 120 attr_reader :name, :age, :gender, :group, :email, :skills def initialize(name:, age:, gender:, group:, email:, skills: {}) @name = name @age = age @gender = gender @group = group @email = email @skills = skills end def to_s gender_text = @gender == :male ? 'Мужской' : 'Женский' result = [] result << "Имя: #{@name}" result << "Возраст: #{@age}" result << "Пол: #{gender_text}" result << "Группа: #{@group}" result << "Email: #{@email}" result << "Навыки:" if @skills.empty? result << "Навыки не указаны" else @skills.each do |skill, level| result << " - #{skill}: #{level}" end end result.join("\n") end def valid_name? !@name.nil? && !@name.strip.empty? && @name.match?(NAME_REGEX) end def valid_age? !@age.nil? && @age.is_a?(Integer) && @age >= MIN_AGE && @age <= MAX_AGE end def valid_gender? GENDERS.include?(@gender) end def valid_group? !@group.nil? && !@group.strip.empty? end def valid_email? !@email.nil? && @email.match?(EMAIL_REGEX) end def valid_skills? return false unless @skills.is_a?(Hash) @skills.all? do |skill, level| valid_skill?(skill) && valid_level?(level) end end def skills_errors return ["Навыки должны быть хешем"] unless @skills.is_a?(Hash) errors = [] @skills.each do |skill, level| unless valid_skill?(skill) errors << "Некорректное название навыка: '#{skill}'. Название навыка должно быть непустым" end unless valid_level?(level) errors << "Некорректный уровень для навыка '#{skill}': '#{level}'. Уровень должен быть непустой строкой" end end errors end def valid? valid_name? && valid_age? && valid_gender? && valid_group? && valid_email? && valid_skills? end def errors error_list = [] error_list << "Некорректное имя" unless valid_name? error_list << "Некорректный возраст" unless valid_age? error_list << "Некорректный пол" unless valid_gender? error_list << "Некорректная группа" unless valid_group? error_list << "Некорректный email" unless valid_email? error_list.concat(skills_errors) unless valid_skills? error_list end private def valid_skill?(skill) skill.is_a?(Symbol) && !skill.to_s.strip.empty? end def valid_level?(level) level.is_a?(String) && !level.strip.empty? end end