Код IT
← Каталог

Объектно-ориентированное программирование в Ruby — Включение модулей

Фрагмент из «Объектно-ориентированное программирование в Ruby»: Включение модулей.

Ruby main.rb
class User
  include Loggable
  include Validatable
  
  attr_accessor :username, :email, :password
  
  def initialize(username, email, password)
    @username = username
    @email = email
    @password = password
    log_info("Создан новый пользователь: #{username}")
  end
  
  def validate
    errors.clear
    validate_presence(:username, username)
    validate_presence(:email, email)
    validate_presence(:password, password)
    validate_length(:username, username, min: 3, max: 20)
    validate_length(:password, password, min: 6, max: 100)
    valid?
  end
  
  def save
    if validate
      log_info("Пользователь #{username} сохранен")
      true
    else
      log_error("Ошибка валидации для #{username}: #{errors.join(', ')}")
      false
    end
  end
end

user = User.new("john_doe", "john@example.com", "secret123")
user.save
# [2026-02-11 12:00:00] INFO: Создан новый пользователь: john_doe
# [2026-02-11 12:00:00] INFO: Пользователь john_doe сохранен

invalid_user = User.new("", "", "123")
invalid_user.save
# [2026-02-11 12:00:00] INFO: Создан новый пользователь: 
# [2026-02-11 12:00:00] ERROR: Ошибка валидации для : username не может быть пустым, email не может быть пустым, username должен быть не менее 3 символов, password должен быть не менее 6 символов
class User
  include Loggable
  include Validatable
  
  attr_accessor :username, :email, :password
  
  def initialize(username, email, password)
    @username = username
    @email = email
    @password = password
    log_info("Создан новый пользователь: #{username}")
  end
  
  def validate
    errors.clear
    validate_presence(:username, username)
    validate_presence(:email, email)
    validate_presence(:password, password)
    validate_length(:username, username, min: 3, max: 20)
    validate_length(:password, password, min: 6, max: 100)
    valid?
  end
  
  def save
    if validate
      log_info("Пользователь #{username} сохранен")
      true
    else
      log_error("Ошибка валидации для #{username}: #{errors.join(', ')}")
      false
    end
  end
end

user = User.new("john_doe", "john@example.com", "secret123")
user.save
# [2026-02-11 12:00:00] INFO: Создан новый пользователь: john_doe
# [2026-02-11 12:00:00] INFO: Пользователь john_doe сохранен

invalid_user = User.new("", "", "123")
invalid_user.save
# [2026-02-11 12:00:00] INFO: Создан новый пользователь: 
# [2026-02-11 12:00:00] ERROR: Ошибка валидации для : username не может быть пустым, email не может быть пустым, username должен быть не менее 3 символов, password должен быть не менее 6 символов