feat: add StudentShort class with immutable fields and constructors

- Created StudentShort class with fields: ID, surname initials, git, and contact, which cannot be modified directly.
- Implemented two constructors:
  1. One that accepts a Student object to initialize fields.
  2. Another that accepts ID and a string containing surname initials, git, and contact information.
- Updated main.rb to test both constructors of StudentShort, ensuring proper field initialization and immutability.
pull/4/head
Artem-Darius Weber 4 months ago
parent 611c712b8a
commit 68ca94d4e9

@ -1,7 +1,8 @@
require_relative 'student' require_relative 'student'
require_relative 'student_short'
begin begin
student_string = "Норакет Норакет Норакет | ID: 2 | Phone: +1234567890 | Telegram: @nora | Email: nora@example.com | Git: https://github.com/nora" student_string = "Норакет Норакет Норакет | ID: 2 | Phone: +1234567890 | Telegram: @noracat | Email: nora@example.com | Git: https://github.com/nora"
student_from_string = Student.from_string(student_string) student_from_string = Student.from_string(student_string)
puts "Создан объект из строки:\n#{student_from_string}" puts "Создан объект из строки:\n#{student_from_string}"
@ -11,7 +12,7 @@ begin
name: 'Артем-Дариус', name: 'Артем-Дариус',
patronymic: 'Вебер', patronymic: 'Вебер',
id: 1, id: 1,
git: 'https://git.djft.ru' git: 'https://github.com/space-creator'
) )
student1.set_contacts( student1.set_contacts(
@ -38,6 +39,21 @@ begin
puts student1 puts student1
puts '-' * 40 puts '-' * 40
puts student2 puts student2
student_short_from_student = StudentShort.new(student1)
puts "StudentShort from Student object:"
puts "ID: #{student_short_from_student.id}"
puts "Surname and Initials: #{student_short_from_student.surname_initials}"
puts "Git: #{student_short_from_student.git}"
puts "Contact: #{student_short_from_student.contact}"
student_short_from_string = StudentShort.from_string(5, 'Skye A.A., Git: https://github.com/skye, Contact: Phone: +4923467890')
puts "StudentShort from string:"
puts "ID: #{student_short_from_string.id}"
puts "Surname and Initials: #{student_short_from_string.surname_initials}"
puts "Git: #{student_short_from_string.git}"
puts "Contact: #{student_short_from_string.contact}"
rescue ArgumentError => e rescue ArgumentError => e
puts "Ошибка: #{e.message}" puts "Ошибка: #{e.message}"
end end

@ -0,0 +1,30 @@
class StudentShort
attr_reader :id, :surname_initials, :git, :contact
def initialize(student)
@id = student.id
@surname_initials = student.surname_and_initials
@git = student.git_info
@contact = student.contact_info
end
def self.from_string(id, info_string)
parts = info_string.split(', ').map(&:strip)
surname_initials = parts[0]
git = parts[1].split(': ').last
contact = parts[2].split(': ').last
new_instance = allocate
new_instance.send(:initialize_from_data, id, surname_initials, git, contact)
new_instance
end
private
def initialize_from_data(id, surname_initials, git, contact)
@id = id
@surname_initials = surname_initials
@git = git
@contact = contact
end
end
Loading…
Cancel
Save