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
|
# File 'lib/library_backup_manager.rb', line 18
def self.included(base)
base.class_eval do
def self.restore_from_backup
parsed = read_backup_with_validation
library = Library.new
restore_authors(library, parsed[:authors])
restore_books(library, parsed[:books])
restore_readers(library, parsed[:readers])
restore_orders(library, parsed[:orders])
library
end
def self.read_backup_with_validation
parsed = FileWorker.read_backup
fail 'Invalid Backup!' if !parsed.is_a?(Hash) || parsed[:library].nil?
parsed[:library]
end
def self.restore_authors(library, parsed_authors)
parsed_authors.each do |author_hash|
library.save_resource(Author.new(author_hash[:name], author_hash[:bio]))
end
end
def self.restore_books(library, parsed_books)
parsed_books.each do |book_hash|
author = library.find_author(book_hash[:author])
library.save_resource(Book.new(book_hash[:title], author))
end
end
def self.restore_readers(library, parsed_readers)
parsed_readers.each do |reader_hash|
reader = Reader.new(reader_hash[:name], reader_hash[:email])
reader.set_address(reader_hash[:city], reader_hash[:street], reader_hash[:house])
library.save_resource(reader)
end
end
def self.restore_orders(library, parsed_orders)
parsed_orders.each do |order_hash|
book = library.find_book(order_hash[:book])
reader = library.find_reader(order_hash[:reader])
order = Order.new(book, reader, order_hash[:date])
library.save_resource(order)
end
end
end
end
|