module LibraryBackupManager

Public Class Methods

included(base) click to toggle source
# 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
read_backup_with_validation() click to toggle source
# File lib/library_backup_manager.rb, line 31
def self.read_backup_with_validation
  parsed = FileWorker.read_backup
  fail 'Invalid Backup!' if !parsed.is_a?(Hash) || parsed[:library].nil?
  parsed[:library]
end
restore_authors(library, parsed_authors) click to toggle source
# File lib/library_backup_manager.rb, line 37
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
restore_books(library, parsed_books) click to toggle source
# File lib/library_backup_manager.rb, line 43
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
restore_from_backup() click to toggle source
# File lib/library_backup_manager.rb, line 21
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
restore_orders(library, parsed_orders) click to toggle source
# File lib/library_backup_manager.rb, line 58
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
restore_readers(library, parsed_readers) click to toggle source
# File lib/library_backup_manager.rb, line 50
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

Public Instance Methods

as_yaml() click to toggle source
# File lib/library_backup_manager.rb, line 7
def as_yaml
  {
      library: {
          books: books.map(&:to_h), # .map { |book| book.to_h }
          readers: readers.map(&:to_h),
          orders: orders.map(&:to_h),
          authors: authors.map(&:to_h)
      }
  }.to_yaml
end
save_backup() click to toggle source
# File lib/library_backup_manager.rb, line 3
def save_backup
  FileWorker.write_backup(as_yaml)
end