/
Evorunner
/
ruby_labs
Обзор
Документация
Войти
/
Evorunner
/
ruby_labs
Код
Запросы
4
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
Lab4
Lab3/student.rb
78 строк
2 KB
Иван
lab-03: ООП, классы Student и StudentCollection
31 май 2026, 17:08
31 май 2026, 17:08
4ab2cb6
Код
Авторство
О чём код?
class Student VALID_GENDERS = %w[male female].freeze VALID_SKILL_LEVELS = %w[beginner intermediate advanced expert].freeze EMAIL_REGEX = /\A[\w+\-.]+@[a-z\d\-.]+\.[a-z]+\z/i attr_accessor :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 valid_name? name.is_a?(String) && !name.strip.empty? end def valid_age? age.is_a?(Integer) && age > 0 end def valid_gender? VALID_GENDERS.include?(gender.to_s) end def valid_group? group.is_a?(String) && !group.strip.empty? end def valid_email? email.is_a?(String) && email.match?(EMAIL_REGEX) end def valid_skills? return false unless skills.is_a?(Hash) skills.all? do |skill_name, level| !skill_name.to_s.strip.empty? && VALID_SKILL_LEVELS.include?(level) end end # Общая валидация def valid? valid_name? && valid_age? && valid_gender? && valid_group? && valid_email? && valid_skills? end def errors errs = [] errs << "Имя не может быть пустым" unless valid_name? errs << "Возраст должен быть положительным целым числом" unless valid_age? errs << "Пол должен быть 'male' или 'female'" unless valid_gender? errs << "Группа не может быть пустой" unless valid_group? errs << "Email некорректен" unless valid_email? errs << "Навыки содержат некорректные данные" unless valid_skills? errs end # Форматированный вывод def to_s gender_str = gender.to_s == "male" ? "мужской" : "женский" lines = [] lines << "#{name}:" lines << " #{age} лет, #{gender_str}" lines << " #{email}" if skills.any? lines << " Навыки:" skills.each { |skill, level| lines << " #{skill}: #{level}" } end lines.join("\n") end end