Class: Student_list_presenter
- Inherits:
-
Base_presenter
- Object
- Base_presenter
- Student_list_presenter
- Defined in:
- lib/presenters/base_presenters/student_list_presenter.rb
Overview
Student_list_presenter
Презентер для управления списком студентов. Отвечает за логику отображения, фильтрации и сортировки данных о студентах.
Instance Method Summary collapse
-
#add_student(student) ⇒ Object
Добавление нового студента.
-
#apply_filters ⇒ Object
Применение фильтров.
-
#check_and_update_page ⇒ Object
Проверка и, если нужно, смена страницы в таблице.
-
#delete_student ⇒ Object
Удаление выбранных студентов в таблице студентов.
-
#deselect(number) ⇒ Object
Удаление выделения строки таблицы.
-
#get_selected ⇒ Array<Integer>
Получение списка ID выбранных студентов.
-
#get_student(id) ⇒ Student
Получение объекта студента по ID.
-
#initialize(view) ⇒ Student_list_presenter
constructor
Инициализация презентера списка студентов.
-
#refresh_data ⇒ Object
Обновление данных в таблице студентов.
-
#replace_student(student) ⇒ Object
Изменение студента.
-
#reset_filters ⇒ Object
Сброс фильтров.
-
#select(number) ⇒ Object
Выбор строки таблицы.
-
#set_sort_order(column_index) ⇒ Object
Установка порядка сортировки и сортировка данных в таблице.
-
#switch_page(direction) ⇒ Object
Изменение текущей страницы в таблице.
Constructor Details
#initialize(view) ⇒ Student_list_presenter
Инициализация презентера списка студентов. Настраивает список студентов, фильтры и порядок сортировки.
27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 |
# 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.}" self.logger.error(error_msg) self.view.show_error(error_msg) end end |
Instance Method Details
#add_student(student) ⇒ Object
Добавление нового студента.
72 73 74 75 76 77 78 |
# 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 |
#apply_filters ⇒ Object
Применение фильтров.
175 176 177 178 179 180 181 182 183 |
# 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 |
#check_and_update_page ⇒ Object
Проверка и, если нужно, смена страницы в таблице. Используется после удаления студента.
155 156 157 158 159 |
# 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 |
#delete_student ⇒ Object
Удаление выбранных студентов в таблице студентов.
136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 |
# 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.}" self.logger.error error_msg self.view.show_error(error_msg) ensure self.refresh_data self.check_and_update_page end end |
#deselect(number) ⇒ Object
Удаление выделения строки таблицы.
96 97 98 99 100 101 102 103 104 |
# 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. rescue self.logger.error "Ошибка при удалении выделения строки: #{number}" end end |
#get_selected ⇒ Array<Integer>
Получение списка ID выбранных студентов.
109 110 111 112 113 |
# 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 |
#get_student(id) ⇒ Student
Получение объекта студента по ID.
118 119 120 121 122 123 |
# 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 |
#refresh_data ⇒ Object
Обновление данных в таблице студентов. Выполняет сброс фильтров, применяет новые фильтры и обновляет представление.
50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 |
# 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.}" self.logger.error error_msg self.view.show_error(error_msg) end self.logger.info "Таблица студентов обновлена" end |
#replace_student(student) ⇒ Object
Изменение студента.
128 129 130 131 132 133 |
# 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 |
#reset_filters ⇒ Object
Сброс фильтров
186 187 188 189 |
# File 'lib/presenters/base_presenters/student_list_presenter.rb', line 186 def reset_filters self.logger.info "Сброс фильтров" self.filters = Filter.new end |
#select(number) ⇒ Object
Выбор строки таблицы.
83 84 85 86 87 88 89 90 91 |
# 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. rescue self.logger.error "Ошибка при выделении строки: #{number}" end end |
#set_sort_order(column_index) ⇒ Object
Установка порядка сортировки и сортировка данных в таблице.
@param column_index [Integer] Индекс столбца, по которому выполняется сортировка.
194 195 196 197 198 199 200 201 202 |
# 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 |
#switch_page(direction) ⇒ Object
Изменение текущей страницы в таблице.
164 165 166 167 168 169 170 171 172 |
# 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 |