-
Notifications
You must be signed in to change notification settings - Fork 0
/
data_store.rb
90 lines (82 loc) · 2.46 KB
/
data_store.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
require 'json'
require_relative 'student'
require_relative 'rental'
require_relative 'book'
require_relative 'teacher'
require_relative 'classroom'
module DataStore
def load_people
if File.exist?('person.json')
JSON.parse(File.read('person.json')).map do |people|
if people['key'] == 'Teacher'
teacher = Teacher.new(age: people['age'], id: people['id'], name: people['name'],
specialization: people['specialization'])
teacher
else
parent_permission = people['permission'] && true
student = Student.new(age: people['age'], id: people['id'], name: people['name'],
parent_permission: parent_permission, classroom: people['classroom'])
student
end
end
else
[]
end
end
def load_books
file = 'books.json'
if File.exist? file
JSON.parse(File.read(file)).map do |book|
Book.new(book['title'], book['author'])
end
else
[]
end
end
def get_person_by_id(id)
@people.each { |person| return person if person.id == id }
end
def get_book_by_title(title)
@books.each { |book| return book if book.title == title }
end
def load_rentals
file = 'rentals.json'
if File.exist? file
JSON.parse(File.read(file)).map do |rental|
date = rental['date']
person = get_person_by_id(rental['person'])
book = get_book_by_title(rental['book'])
Rental.new(date, book, person)
end
else
[]
end
end
def save_people
data = []
@people.each do |people|
if people.instance_of?(Teacher)
data.push({ key: 'teacher', id: people.id, age: people.age, name: people.name,
specialization: people.specialization })
else
data.push({ key: 'student', id: people.id, age: people.age, name: people.name,
permission: people.parent_permission, classroom: people.classroom })
end
end
open('person.json', 'w') { |f| f.write JSON.generate(data) }
end
def save_rental
data = []
@rentals.each do |rental|
data.push({ date: rental.date, person: rental.person.id, book: rental.book.title })
end
open('rentals.json', 'w') { |f| f << JSON.generate(data) }
end
def save_books
data = []
@books.each do |book|
data.push({ title: book.title, author: book.author })
end
open('books.json', 'w') { |f| f << JSON.generate(data) }
end
end