Class: Edit_student_presenter

Inherits:
Object
  • Object
show all
Defined in:
lib/presenters/edit_student/edit_student_presenter.rb

Overview

Edit_student_presenter

Базовый класс для управления данными студентов. Предоставляет общие методы для редактирования информации о студентах.

Instance Method Summary collapse

Constructor Details

#initialize(view, parent_presenter) ⇒ Edit_student_presenter

Инициализация презентера для управления данными студентов.

Parameters:

  • view (Modal_interface)

    Представление для взаимодействия с пользователем.

  • parent_presenter (Student_list_presenter)

    Родительский презентер для управления общим контекстом.



12
13
14
15
16
# File 'lib/presenters/edit_student/edit_student_presenter.rb', line 12

def initialize(view, parent_presenter)
  self.view = view
  self.parent_presenter = parent_presenter
  self.logger = App_logger.instance
end

Instance Method Details

#get_studentObject

Получение данных студента из родительского презентера. Загружает информацию о выбранном студенте.



52
53
54
55
56
57
58
59
60
61
# File 'lib/presenters/edit_student/edit_student_presenter.rb', line 52

def get_student
  id = self.parent_presenter.get_selected[0]
  begin
    self.student = self.parent_presenter.get_student(id)
  rescue => e
    error_msg = "Ошибка при загрузке данных о студенте: #{e.message}"
    self.logger.error error_msg
    self.view.show_error_message(error_msg)
  end
end

#new_student(student_data) ⇒ Object

Создание нового объекта студента из предоставленных данных.

Parameters:

  • student_data (Hash)

    Данные студента.



37
38
39
40
41
42
43
44
45
46
47
48
# File 'lib/presenters/edit_student/edit_student_presenter.rb', line 37

def new_student(student_data)
  data = student_data.transform_values do |value|
    stripped = value.strip
    stripped.empty? ? nil : stripped
  end

  attributes = self.get_attributes
  data.each do |key, value|
    attributes[key.to_sym] = value
  end
  self.student = Student.new_from_hash(attributes)
end

#operation(student_data) ⇒ Object

Основная операция редактирования студента.

Parameters:

  • student_data (Hash)

    Данные студента.



21
22
23
24
25
26
27
28
29
30
31
32
# File 'lib/presenters/edit_student/edit_student_presenter.rb', line 21

def operation(student_data)
  begin
    self.logger.debug "Создание объекта студента: #{student_data.to_s}"
    new_student(student_data)
    self.parent_presenter.replace_student(self.student)
    self.view.close
  rescue => e
    error_msg = "Ошибка при изменении студента: #{e.message}"
    self.logger.error error_msg
    self.view.show_error_message(error_msg)
  end
end

#populate_fieldsObject

Заполнение полей интерфейса данными студента.

Raises:

  • (NotImplementedError)

    Метод должен быть реализован в подклассе.



66
67
68
# File 'lib/presenters/edit_student/edit_student_presenter.rb', line 66

def populate_fields
  raise NotImplementedError
end

#valid_data?(student_data) ⇒ Boolean

Проверка валидности данных студента.

Parameters:

  • student_data (Hash)

    Данные студента.

Returns:

  • (Boolean)

    Возвращает true, если данные валидны.



74
75
76
77
78
# File 'lib/presenters/edit_student/edit_student_presenter.rb', line 74

def valid_data?(student_data)
  data = student_data.transform_values { |value| value.strip }
  Student.valid_name?(data["first_name"]) && Student.valid_name?(data["name"]) &&
    Student.valid_name?(data["patronymic"]) && Student.valid_birthdate?(data["birthdate"])
end