class Student_list_presenter
Student_list_presenter
¶ ↑
Презентер для управления списком студентов. Отвечает за логику отображения, фильтрации и сортировки данных о студентах.
Public Class Methods
Source
# File lib/presenters/base_presenters/student_list_presenter.rb, line 27 def initialize(view) super(view) self.logger.debug("Инициализация Student_list_presenter") begin self.logger.debug("Инициализация Students_list") self.entities_list = Students_list.new(Students_list_DB.new) # self.entities_list = Students_list.new(Students_list_file_adapter.new(Students_list_file.new('./students.json', JSON_storage_strategy.new))) self.logger.debug("Инициализация Data_list_student_short") self.data_list = Data_list_student_short.new([]) self.filters = Filter.new self.sort_order = { order: :asc, col_index: 0 } rescue StandardError => e error_msg = "Ошибка при получении доступа к файлу: #{e.message}" self.logger.error(error_msg) self.view.show_error(error_msg) end end
Инициализация презентера списка студентов. Настраивает список студентов, фильтры и порядок сортировки.
@param view [Base_view_interface] Представление, отображающее список студентов.
Base_presenter::new
Public Instance Methods
Source
# File lib/presenters/base_presenters/student_list_presenter.rb, line 72 def add_student(student) self.logger.info "Добавление студента в хранилище" self.logger.debug "Данные студента: #{student.to_line_s}" self.entities_list.add_student(student) self.logger.info "Студент добавлен в хранилище" self.refresh_data end
Добавление нового студента.
@param student [Student] Объект студента для добавления.
Source
# File lib/presenters/base_presenters/student_list_presenter.rb, line 175 def apply_filters self.logger.info "Установка фильтров" self.apply_full_name_filter self.apply_git_filter self.apply_email_filter self.apply_phone_number_filter self.apply_telegram_filter self.apply_sort end
Применение фильтров.
Source
# File lib/presenters/base_presenters/student_list_presenter.rb, line 155 def check_and_update_page() if self.view.current_page > self.view.total_pages switch_page(-1) end end
Проверка и, если нужно, смена страницы в таблице. Используется после удаления студента.
Source
# File lib/presenters/base_presenters/student_list_presenter.rb, line 136 def delete_student ids = self.get_selected begin ids.each do |id| self.logger.info "Удаление студента с id: #{id}" self.entities_list.delete_student(id) end rescue => e error_msg = "Ошибка при удалении: #{e.message}" self.logger.error error_msg self.view.show_error(error_msg) ensure self.refresh_data self.check_and_update_page end end
Удаление выбранных студентов в таблице студентов.
Source
# File lib/presenters/base_presenters/student_list_presenter.rb, line 96 def deselect(number) begin self.data_list.deselect(number) self.logger.info "Выделение со строки: #{number} убрано" self.view.update_button_states rescue self.logger.error "Ошибка при удалении выделения строки: #{number}" end end
Удаление выделения строки таблицы.
@param number [Integer] Индекс строки для удаления выбора.
Source
# File lib/presenters/base_presenters/student_list_presenter.rb, line 109 def get_selected selected = self.data_list.get_selected self.logger.debug "Выделенные студенты: #{selected}" selected end
Получение списка ID выбранных студентов.
@return [Array<Integer>] Список ID выбранных студентов.
Source
# File lib/presenters/base_presenters/student_list_presenter.rb, line 118 def get_student(id) self.logger.info "Получение студента по id: #{id}" student = self.entities_list.get_student_by_id(id) self.logger.debug "Студент: #{student.to_line_s}" student end
Получение объекта студента по ID.
@return [Student] Объект студента.
Source
# File lib/presenters/base_presenters/student_list_presenter.rb, line 50 def refresh_data self.logger.info "Обновление таблицы студентов" self.data_list.clear_selected self.reset_filters self.apply_filters begin self.logger.info "Поиск студентов в хранилище" self.data_list = self.entities_list.get_k_n_student_short_list(self.view.current_page, self.view.rows_per_page, self.filters, self.data_list) self.data_list.count = self.entities_list.get_student_short_count self.view.update_view({ columns: self.data_list.get_names, total_count: self.data_list.count, table_data: self.data_list.retrieve_data }) rescue => e error_msg = "Ошибка при получении данных: #{e.message}" self.logger.error error_msg self.view.show_error(error_msg) end self.logger.info "Таблица студентов обновлена" end
Обновление данных в таблице студентов. Выполняет сброс фильтров, применяет новые фильтры и обновляет представление.
Source
# File lib/presenters/base_presenters/student_list_presenter.rb, line 128 def replace_student(student) self.logger.info "Замена студента с id: #{student.id}" self.logger.debug "Замена студента: #{student.to_line_s}" self.entities_list.replace_student(student.id, student) self.refresh_data end
Изменение студента.
@param student [Student] Объект студента для изменения.
Source
# File lib/presenters/base_presenters/student_list_presenter.rb, line 186 def reset_filters self.logger.info "Сброс фильтров" self.filters = Filter.new end
Сброс фильтров
Source
# File lib/presenters/base_presenters/student_list_presenter.rb, line 83 def select(number) begin self.data_list.select(number) self.logger.info "Выделена строка: #{number}" self.view.update_button_states rescue self.logger.error "Ошибка при выделении строки: #{number}" end end
Выбор строки таблицы.
@param number [Integer] Индекс строки для выбора.
Source
# File lib/presenters/base_presenters/student_list_presenter.rb, line 194 def set_sort_order(column_index) if self.sort_order[:col_index] == column_index self.sort_order[:order] = self.sort_order[:order] == :asc ? :desc : :asc else self.sort_order[:col_index] = column_index self.sort_order[:order] = :asc end self.refresh_data end
Установка порядка сортировки и сортировка данных в таблице.
@param column_index [Integer] Индекс столбца, по которому выполняется сортировка.
Source
# File lib/presenters/base_presenters/student_list_presenter.rb, line 164 def switch_page(direction) new_page = self.view.current_page + direction if new_page < 1 || new_page > self.view.total_pages return end self.logger.info "Переключение страницы на: #{new_page}" self.view.current_page = new_page self.refresh_data end
Изменение текущей страницы в таблице.
@param direction [Integer] Направление для изменения страницы.