Код IT Загрузка примера кода…

Ruby main.rb
module Loggable
  def log(message)
    timestamp = Time.now.strftime("%Y-%m-%d %H:%M:%S")
    puts "[#{timestamp}] #{message}"
  end
  
  def log_error(error)
    log("ERROR: #{error}")
  end
  
  def log_info(info)
    log("INFO: #{info}")
  end
end

module Validatable
  def validate_presence(field, value)
    unless value && !value.to_s.strip.empty?
      errors << "#{field} не может быть пустым"
    end
  end
  
  def validate_length(field, value, min:, max:)
    length = value.to_s.length
    if length < min
      errors << "#{field} должен быть не менее #{min} символов"
    elsif length > max
      errors << "#{field} должен быть не более #{max} символов"
    end
  end
  
  def errors
    @errors ||= []
  end
  
  def valid?
    errors.empty?
  end
end

module Timestampable
  attr_reader :created_at, :updated_at
  
  def touch
    @updated_at = Time.now
  end
  
  private
  
  def set_timestamps
    @created_at = Time.now
    @updated_at = Time.now
  end
end
module Loggable
  def log(message)
    timestamp = Time.now.strftime("%Y-%m-%d %H:%M:%S")
    puts "[#{timestamp}] #{message}"
  end
  
  def log_error(error)
    log("ERROR: #{error}")
  end
  
  def log_info(info)
    log("INFO: #{info}")
  end
end

module Validatable
  def validate_presence(field, value)
    unless value && !value.to_s.strip.empty?
      errors << "#{field} не может быть пустым"
    end
  end
  
  def validate_length(field, value, min:, max:)
    length = value.to_s.length
    if length < min
      errors << "#{field} должен быть не менее #{min} символов"
    elsif length > max
      errors << "#{field} должен быть не более #{max} символов"
    end
  end
  
  def errors
    @errors ||= []
  end
  
  def valid?
    errors.empty?
  end
end

module Timestampable
  attr_reader :created_at, :updated_at
  
  def touch
    @updated_at = Time.now
  end
  
  private
  
  def set_timestamps
    @created_at = Time.now
    @updated_at = Time.now
  end
end