Module: SimpleBackup

Defined in:
lib/rails_simple_backup_restore/simple_backup.rb

Class Method Summary collapse

Class Method Details

.backupObject



26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
# File 'lib/rails_simple_backup_restore/simple_backup.rb', line 26

def self.backup
  init
  
  input_filenames = ["config/backup_version"]
  
  SerializationHelper::Base.new(YamlDb::Helper).dump db_dump_path
  
  input_filenames << db_dump_path
  
  input_filenames += current_backup_files
  
  zip = nil
  Dir.mktmpdir 'simple_backup' do |dir|
    zip_path = File.join(dir, "backup.zip")
    Zip::ZipFile.open(zip_path, Zip::ZipFile::CREATE) do |zipfile|
      input_filenames.each do |filename|
        zipfile.add(filename, Rails.root.join(filename))
      end
    end
    zip = File.open(zip_path, 'r')
  end
  zip
end

.current_backup_filesObject



8
9
10
11
12
13
14
15
16
17
18
19
20
# File 'lib/rails_simple_backup_restore/simple_backup.rb', line 8

def self.current_backup_files
  files = []
  backup_files_path = Rails.root.join("config", "backup_files")
  if backup_files_path.exist?
    backup_files_path.each_line do |line|
      Dir[line.strip].each do |path|
        next if File.directory?(path)
        files << path
      end
    end
  end
  files
end

.db_dump_pathObject



22
23
24
# File 'lib/rails_simple_backup_restore/simple_backup.rb', line 22

def self.db_dump_path
  "db/data.yml"
end

.initObject



2
3
4
5
6
# File 'lib/rails_simple_backup_restore/simple_backup.rb', line 2

def self.init
  require 'tmpdir'
  require 'zip/zip'
  require 'yaml_db'
end

.restore(file) ⇒ Object



50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
# File 'lib/rails_simple_backup_restore/simple_backup.rb', line 50

def self.restore(file)
  init
  
  Dir.mktmpdir 'simple_restore' do |dir|
    Zip::ZipFile.open(file.path) do |zip|
      version = zip.find_entry "config/backup_version"
      raise "Invalid a backup file" unless version
      current_version = File.read("config/backup_version")
      raise "Backup version mismatch" if current_version != zip.read("config/backup_version")
      
      current_backup_files.each do |file|
        File.delete(file)
      end
      
      zip.each do |entry|
        File.open(entry.name, "wb") { |f| f.write entry.get_input_stream.read }
      end
      
      SerializationHelper::Base.new(YamlDb::Helper).load db_dump_path
    end
  end
end