Class: Students_list_file

Inherits:
Students_list_interface show all
Defined in:
lib/models/students_list/students_list_file.rb

Instance Method Summary collapse

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

#readObject

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

Raises:

  • (IndexError)


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

#writeObject

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