require_relative '../student' require_relative '../student_short' require_relative '../data_list_student_short' require_relative '../data_table' class StudentsList attr_reader :students def initialize(filename, persistence_strategy) @filename = filename @persistence_strategy = persistence_strategy @students = [] end # Загрузка студентов через выбранную стратегию def load @students = @persistence_strategy.load(@filename) self end # Сохранение студентов через выбранную стратегию def save @persistence_strategy.save(@filename, @students) self end def get_student_by_id(id) @students.find { |s| s.id.to_s == id.to_s } end # Получить список из k студентов (страница n) в виде объекта DataList def get_k_n_student_short_list(k, n, data_list = nil) start_index = (n - 1) * k sorted_students = @students.sort_by { |s| s.surname_initials } selected_students = sorted_students[start_index, k] || [] short_objects = selected_students.map { |s| StudentShort.from_student(s) } if data_list && data_list.is_a?(DataList) if data_list.respond_to?(:items=) data_list.items = short_objects else data_list = DataListStudentShort.new(short_objects) end data_list else DataListStudentShort.new(short_objects) end end # Сортировка студентов по фамилии и инициалам def sort_students! @students.sort_by! { |s| s.surname_initials } end def add_student(student) new_id = if @students.empty? 1 else max_id = @students.map { |s| s.id.to_i }.max max_id + 1 end student.id = new_id.to_s @students << student student end def update_student_by_id(id, new_student) index = @students.find_index { |s| s.id.to_s == id.to_s } if index new_student.id = @students[index].id @students[index] = new_student true else false end end def delete_student_by_id(id) initial_count = @students.size @students.reject! { |s| s.id.to_s == id.to_s } initial_count != @students.size end def get_student_short_count @students.size end end