You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
kubsu-sm5-ruby/lab2/providers/students_list_json.rb

64 lines
1.6 KiB

require 'json'
require 'date'
require_relative 'students_list_base'
require_relative '../student'
class StudentsListJSON < StudentsListBase
def load_from_file
if File.exist?(@filename)
file_content = File.read(@filename)
begin
data = JSON.parse(file_content)
@students = data.map { |student_hash| hash_to_student(student_hash) }
rescue JSON::ParserError => e
warn "Ошибка парсинга JSON: #{e.message}"
@students = []
end
else
@students = []
end
self
end
def save_to_file
data = @students.map { |student| student_to_hash(student) }
File.open(@filename, 'w') do |file|
file.write(JSON.pretty_generate(data))
end
self
rescue IOError => e
warn "Ошибка при записи в файл: #{e.message}"
self
end
private
def student_to_hash(student)
{
'id' => student.id,
'git' => student.git,
'surname' => student.surname,
'name' => student.name,
'patronymic' => student.patronymic,
'birth_date' => student.birth_date.to_s,
'phone' => student.phone,
'telegram' => student.telegram,
'email' => student.email
}
end
def hash_to_student(hash)
Student.new(
id: hash['id'],
git: hash['git'],
surname: hash['surname'],
name: hash['name'],
patronymic: hash['patronymic'],
birth_date: Date.parse(hash['birth_date']),
phone: hash['phone'],
telegram: hash['telegram'],
email: hash['email']
)
end
end