Class: Students_list_file
- Inherits:
-
Students_list_interface
- Object
- Students_list_interface
- Students_list_file
- Defined in:
- lib/models/students_list/students_list_file.rb
Instance Method Summary collapse
-
#add_student(student) ⇒ Object
add student.
-
#delete_student(id) ⇒ Object
delete student by id.
-
#get_k_n_student_short_list(k, n, filter = nil, data_list = nil) ⇒ Object
get data_list_student_short of k n students.
-
#get_student_by_id(id) ⇒ Object
get student by id.
-
#get_student_short_count(filter = nil) ⇒ Object
get count of students.
-
#initialize(file_path, data_storage_strategy) ⇒ Students_list_file
constructor
constructor.
-
#read ⇒ Object
read from data storage.
-
#replace_student(id, new_student) ⇒ Object
replace student by id.
-
#sort_by_full_name! ⇒ Object
sort by full name.
-
#write ⇒ Object
write to data storage.
Constructor Details
#initialize(file_path, data_storage_strategy) ⇒ Students_list_file
constructor
9 10 11 12 13 |
# File 'lib/models/students_list/students_list_file.rb', line 9 def initialize(file_path, data_storage_strategy) self.file_path = file_path self.data_storage_strategy = data_storage_strategy self.students = read end |
Instance Method Details
#add_student(student) ⇒ Object
add student
49 50 51 52 53 54 55 56 57 58 59 |
# File 'lib/models/students_list/students_list_file.rb', line 49 def add_student(student) begin check_unique_fileds(email: student.email, telegram: student.telegram, phone_number: student.phone_number, git: student.git) rescue => e raise e end max_id = self.students.map(&:id).max || 0 student.id = max_id + 1 self.students << student self.write end |
#delete_student(id) ⇒ Object
delete student by id
77 78 79 80 |
# File 'lib/models/students_list/students_list_file.rb', line 77 def delete_student(id) self.students.reject! { |student| student.id == id } self.write end |
#get_k_n_student_short_list(k, n, filter = nil, data_list = nil) ⇒ Object
get data_list_student_short of k n students
31 32 33 34 35 36 37 38 39 40 |
# File 'lib/models/students_list/students_list_file.rb', line 31 def get_k_n_student_short_list(k, n, filter = nil, data_list = nil) start = (k - 1) * n filtered = filter ? filter.apply(self.students) : self.students selected = filtered[start, n] || [] students_short = selected.map { |student| Student_short.new_from_student_obj(student) } data_list ||= Data_list_student_short.new(students_short) data_list.index = start + 1 data_list.data = students_short data_list end |
#get_student_by_id(id) ⇒ Object
get student by id
26 27 28 |
# File 'lib/models/students_list/students_list_file.rb', line 26 def get_student_by_id(id) self.students.find { |student| student.id == id } end |
#get_student_short_count(filter = nil) ⇒ Object
get count of students
83 84 85 |
# File 'lib/models/students_list/students_list_file.rb', line 83 def get_student_short_count(filter = nil) filter ? filter.apply(self.students).size : self.students.size end |
#read ⇒ Object
read from data storage
16 17 18 |
# File 'lib/models/students_list/students_list_file.rb', line 16 def read self.data_storage_strategy.read(self.file_path) end |
#replace_student(id, new_student) ⇒ Object
replace student by id
62 63 64 65 66 67 68 69 70 71 72 73 74 |
# File 'lib/models/students_list/students_list_file.rb', line 62 def replace_student(id, new_student) index = self.students.find_index { |student| student.id == id } raise IndexError, 'Unknown student id' if index.nil? begin check_unique_fileds(email: new_student.email, telegram: new_student.telegram, phone_number: new_student.phone_number, git: new_student.git, current_student: self.students[index]) rescue => e raise e end new_student.id = id self.students[index] = new_student self.write end |
#sort_by_full_name! ⇒ Object
sort by full name
43 44 45 46 |
# File 'lib/models/students_list/students_list_file.rb', line 43 def sort_by_full_name! self.students.sort_by! { |student| student.get_full_name } self.write end |
#write ⇒ Object
write to data storage
21 22 23 |
# File 'lib/models/students_list/students_list_file.rb', line 21 def write self.data_storage_strategy.write(self.file_path, self.students) end |