backup 3.0.16 → 3.0.18
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/.travis.yml +10 -0
- data/Gemfile.lock +50 -47
- data/Guardfile +3 -3
- data/README.md +136 -81
- data/backup.gemspec +3 -2
- data/bin/backup +36 -15
- data/lib/backup.rb +30 -20
- data/lib/backup/cli.rb +30 -2
- data/lib/backup/compressor/lzma.rb +63 -0
- data/lib/backup/configuration/compressor/lzma.rb +23 -0
- data/lib/backup/configuration/helpers.rb +10 -4
- data/lib/backup/configuration/notifier/mail.rb +5 -0
- data/lib/backup/configuration/storage/dropbox.rb +19 -4
- data/lib/backup/configuration/storage/ftp.rb +4 -0
- data/lib/backup/configuration/storage/local.rb +17 -0
- data/lib/backup/configuration/storage/ninefold.rb +20 -0
- data/lib/backup/configuration/storage/rsync.rb +4 -0
- data/lib/backup/database/postgresql.rb +12 -3
- data/lib/backup/database/redis.rb +5 -1
- data/lib/backup/dependency.rb +11 -12
- data/lib/backup/encryptor/gpg.rb +2 -0
- data/lib/backup/exception/command_failed.rb +8 -0
- data/lib/backup/finder.rb +49 -9
- data/lib/backup/notifier/mail.rb +7 -1
- data/lib/backup/notifier/twitter.rb +1 -1
- data/lib/backup/storage/dropbox.rb +93 -16
- data/lib/backup/storage/ftp.rb +10 -3
- data/lib/backup/storage/local.rb +78 -0
- data/lib/backup/storage/ninefold.rb +96 -0
- data/lib/backup/storage/rsync.rb +37 -20
- data/lib/backup/storage/s3.rb +1 -1
- data/lib/backup/storage/scp.rb +1 -1
- data/lib/backup/syncer/rsync.rb +1 -1
- data/lib/backup/version.rb +1 -1
- data/lib/templates/compressor/lzma +7 -0
- data/lib/templates/storage/dropbox +2 -2
- data/lib/templates/storage/ftp +8 -7
- data/lib/templates/storage/local +7 -0
- data/lib/templates/storage/ninefold +9 -0
- data/lib/templates/storage/rsync +1 -0
- data/spec/archive_spec.rb +0 -1
- data/spec/compressor/bzip2_spec.rb +0 -1
- data/spec/compressor/gzip_spec.rb +0 -1
- data/spec/compressor/lzma_spec.rb +58 -0
- data/spec/configuration/compressor/bzip2_spec.rb +28 -0
- data/spec/configuration/compressor/lzma_spec.rb +28 -0
- data/spec/configuration/database/mongodb_spec.rb +16 -0
- data/spec/configuration/database/mysql_spec.rb +17 -0
- data/spec/configuration/database/postgresql_spec.rb +17 -0
- data/spec/configuration/database/redis_spec.rb +16 -0
- data/spec/configuration/notifier/campfire_spec.rb +11 -0
- data/spec/configuration/notifier/mail_spec.rb +20 -0
- data/spec/configuration/notifier/presently_spec.rb +34 -0
- data/spec/configuration/notifier/twitter_spec.rb +12 -0
- data/spec/configuration/storage/dropbox_spec.rb +0 -6
- data/spec/configuration/storage/ftp_spec.rb +15 -12
- data/spec/configuration/storage/local_spec.rb +28 -0
- data/spec/configuration/storage/ninefold_spec.rb +31 -0
- data/spec/configuration/storage/rsync_spec.rb +2 -0
- data/spec/database/mongodb_spec.rb +0 -1
- data/spec/database/mysql_spec.rb +0 -1
- data/spec/database/postgresql_spec.rb +31 -11
- data/spec/database/redis_spec.rb +9 -4
- data/spec/encryptor/gpg_spec.rb +1 -1
- data/spec/encryptor/open_ssl_spec.rb +0 -1
- data/spec/logger_spec.rb +32 -24
- data/spec/model_spec.rb +15 -15
- data/spec/spec_helper.rb +8 -4
- data/spec/storage/base_spec.rb +0 -4
- data/spec/storage/cloudfiles_spec.rb +0 -1
- data/spec/storage/dropbox_spec.rb +44 -14
- data/spec/storage/ftp_spec.rb +26 -15
- data/spec/storage/local_spec.rb +83 -0
- data/spec/storage/ninefold_spec.rb +142 -0
- data/spec/storage/object_spec.rb +1 -1
- data/spec/storage/rsync_spec.rb +17 -7
- data/spec/storage/s3_spec.rb +4 -3
- data/spec/storage/scp_spec.rb +0 -1
- data/spec/storage/sftp_spec.rb +0 -1
- data/spec/syncer/rsync_spec.rb +8 -8
- metadata +62 -36
data/backup.gemspec
CHANGED
@@ -25,7 +25,8 @@ Gem::Specification.new do |gem|
|
|
25
25
|
gem.executables = ['backup']
|
26
26
|
|
27
27
|
##
|
28
|
-
#
|
29
|
-
gem.add_dependency 'thor',
|
28
|
+
# Gem dependencies
|
29
|
+
gem.add_dependency 'thor', ['~> 0.14.6']
|
30
|
+
gem.add_dependency 'popen4', ['~> 0.1.2']
|
30
31
|
|
31
32
|
end
|
data/bin/backup
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
|
1
|
+
#!/usr/bin/env ruby
|
2
2
|
|
3
3
|
##
|
4
4
|
# Load RubyGems for Ruby <= 1.8.7
|
@@ -7,12 +7,14 @@ require 'tempfile'
|
|
7
7
|
require 'fileutils'
|
8
8
|
|
9
9
|
##
|
10
|
-
# Load Thor for the
|
10
|
+
# Load Thor for the CLI and POpen4 for reading unix process status
|
11
11
|
begin
|
12
12
|
require 'thor'
|
13
|
+
require 'popen4'
|
13
14
|
rescue LoadError
|
14
|
-
puts
|
15
|
-
puts
|
15
|
+
puts "\nBackup requires Thor to load the CLI (Command Line Interface) and POpen4 to determine the status of unix processes."
|
16
|
+
puts "Please install both Thor and POpen4 first:\n\ngem install thor -v '~> 0.14.6'\ngem install popen4 -v '~> 0.1.2'"
|
17
|
+
exit 1
|
16
18
|
end
|
17
19
|
|
18
20
|
##
|
@@ -29,15 +31,16 @@ class BackupCLI < Thor
|
|
29
31
|
##
|
30
32
|
# [Perform]
|
31
33
|
# Performs the backup process. The only required option is the --trigger [-t].
|
32
|
-
# If the other options (--
|
34
|
+
# If the other options (--config-file, --data-path, --cache--path, --tmp-path) aren't specified
|
33
35
|
# it'll fallback to the (good) defaults
|
34
36
|
method_option :trigger, :type => :string, :aliases => ['-t', '--triggers'], :required => true
|
35
37
|
method_option :config_file, :type => :string, :aliases => '-c'
|
36
38
|
method_option :data_path, :type => :string, :aliases => '-d'
|
37
39
|
method_option :log_path, :type => :string, :aliases => '-l'
|
40
|
+
method_option :cache_path, :type => :string
|
38
41
|
method_option :tmp_path, :type => :string
|
39
42
|
method_option :quiet, :type => :boolean, :aliases => '-q'
|
40
|
-
desc 'perform', "Performs the backup for the specified trigger.\n" +
|
43
|
+
desc 'perform', "Performs the backup for the specified trigger.\n" +
|
41
44
|
"You may perform multiple backups by providing multiple triggers, separated by commas.\n\n" +
|
42
45
|
"Example:\n\s\s$ backup perform --triggers backup1,backup2,backup3,backup4\n\n" +
|
43
46
|
"This will invoke 4 backups, and they will run in the order specified (not asynchronous)."
|
@@ -64,6 +67,13 @@ class BackupCLI < Thor
|
|
64
67
|
Backup.send(:const_set, :LOG_PATH, options[:log_path])
|
65
68
|
end
|
66
69
|
|
70
|
+
##
|
71
|
+
# Overwrites the CACHE_PATH location, if --cache-path was specified
|
72
|
+
if options[:cache_path]
|
73
|
+
Backup.send(:remove_const, :CACHE_PATH)
|
74
|
+
Backup.send(:const_set, :CACHE_PATH, options[:cache_path])
|
75
|
+
end
|
76
|
+
|
67
77
|
##
|
68
78
|
# Overwrites the TMP_PATH location, if --tmp-path was specified
|
69
79
|
if options[:tmp_path]
|
@@ -71,21 +81,32 @@ class BackupCLI < Thor
|
|
71
81
|
Backup.send(:const_set, :TMP_PATH, options[:tmp_path])
|
72
82
|
end
|
73
83
|
|
74
|
-
##
|
75
|
-
# Ensure the TMP_PATH and LOG_PATH are created if they do not yet exist
|
76
|
-
Array.new([Backup::TMP_PATH, Backup::LOG_PATH]).each do |path|
|
77
|
-
FileUtils.mkdir_p(path)
|
78
|
-
end
|
79
|
-
|
80
84
|
##
|
81
85
|
# Silence Backup::Logger from printing to STDOUT, if --quiet was specified
|
82
86
|
if options[:quiet]
|
83
87
|
Backup::Logger.send(:const_set, :QUIET, options[:quiet])
|
84
88
|
end
|
85
89
|
|
90
|
+
##
|
91
|
+
# Ensure the CACHE_PATH, TMP_PATH and LOG_PATH are created if they do not yet exist
|
92
|
+
Array.new([Backup::CACHE_PATH, Backup::TMP_PATH, Backup::LOG_PATH]).each do |path|
|
93
|
+
FileUtils.mkdir_p(path)
|
94
|
+
end
|
95
|
+
|
96
|
+
##
|
97
|
+
# Prepare all trigger names by splitting them by ','
|
98
|
+
# and finding trigger names matching wildcard
|
99
|
+
triggers = options[:trigger].split(",")
|
100
|
+
triggers.map!(&:strip).map!{ |t|
|
101
|
+
t.include?(Backup::Finder::WILDCARD) ?
|
102
|
+
Backup::Finder.new(t).matching : t
|
103
|
+
}.flatten!
|
104
|
+
|
105
|
+
#triggers.unique! # Uncomment if its undesirable to call triggers twice
|
106
|
+
|
86
107
|
##
|
87
108
|
# Process each trigger
|
88
|
-
|
109
|
+
triggers.each do |trigger|
|
89
110
|
|
90
111
|
##
|
91
112
|
# Defines the TRIGGER constant
|
@@ -101,7 +122,7 @@ class BackupCLI < Thor
|
|
101
122
|
|
102
123
|
##
|
103
124
|
# Parses the backup configuration file and returns the model instance by trigger
|
104
|
-
model = Backup::Finder.new(trigger
|
125
|
+
model = Backup::Finder.new(trigger).find
|
105
126
|
|
106
127
|
##
|
107
128
|
# Runs the returned model
|
@@ -177,7 +198,7 @@ class BackupCLI < Thor
|
|
177
198
|
file.write( File.read(temp_file.path) )
|
178
199
|
puts "Generated configuration file in '#{ config }'"
|
179
200
|
end
|
180
|
-
end
|
201
|
+
end
|
181
202
|
temp_file.unlink
|
182
203
|
end
|
183
204
|
|
data/lib/backup.rb
CHANGED
@@ -2,6 +2,7 @@
|
|
2
2
|
|
3
3
|
require 'fileutils'
|
4
4
|
require 'yaml'
|
5
|
+
require 'etc'
|
5
6
|
|
6
7
|
##
|
7
8
|
# The Backup Ruby Gem
|
@@ -17,8 +18,8 @@ module Backup
|
|
17
18
|
# You can do:
|
18
19
|
# database MySQL do |mysql|
|
19
20
|
DATABASES = ['MySQL', 'PostgreSQL', 'MongoDB', 'Redis']
|
20
|
-
STORAGES = ['S3', 'CloudFiles', 'Dropbox', 'FTP', 'SFTP', 'SCP', 'RSync']
|
21
|
-
COMPRESSORS = ['Gzip', 'Bzip2']
|
21
|
+
STORAGES = ['S3', 'CloudFiles', 'Ninefold', 'Dropbox', 'FTP', 'SFTP', 'SCP', 'RSync', 'Local']
|
22
|
+
COMPRESSORS = ['Gzip', 'Bzip2', 'Lzma']
|
22
23
|
ENCRYPTORS = ['OpenSSL', 'GPG']
|
23
24
|
SYNCERS = ['RSync', 'S3']
|
24
25
|
NOTIFIERS = ['Mail', 'Twitter', 'Campfire', 'Presently']
|
@@ -37,11 +38,13 @@ module Backup
|
|
37
38
|
|
38
39
|
##
|
39
40
|
# Backup's Environment paths
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
41
|
+
USER = ENV['USER'] || Etc.getpwuid.name
|
42
|
+
PATH = File.join(ENV['HOME'], 'Backup')
|
43
|
+
DATA_PATH = File.join(ENV['HOME'], 'Backup', 'data')
|
44
|
+
CONFIG_FILE = File.join(ENV['HOME'], 'Backup', 'config.rb')
|
45
|
+
LOG_PATH = File.join(ENV['HOME'], 'Backup', 'log')
|
46
|
+
CACHE_PATH = File.join(ENV['HOME'], 'Backup', '.cache')
|
47
|
+
TMP_PATH = File.join(ENV['HOME'], 'Backup', '.tmp')
|
45
48
|
|
46
49
|
##
|
47
50
|
# Autoload Backup base files
|
@@ -60,10 +63,10 @@ module Backup
|
|
60
63
|
autoload :Helpers, File.join(CONFIGURATION_PATH, 'helpers')
|
61
64
|
|
62
65
|
module Notifier
|
63
|
-
autoload :Base,
|
64
|
-
autoload :Mail,
|
65
|
-
autoload :Twitter,
|
66
|
-
autoload :Campfire,
|
66
|
+
autoload :Base, File.join(CONFIGURATION_PATH, 'notifier', 'base')
|
67
|
+
autoload :Mail, File.join(CONFIGURATION_PATH, 'notifier', 'mail')
|
68
|
+
autoload :Twitter, File.join(CONFIGURATION_PATH, 'notifier', 'twitter')
|
69
|
+
autoload :Campfire, File.join(CONFIGURATION_PATH, 'notifier', 'campfire')
|
67
70
|
autoload :Presently, File.join(CONFIGURATION_PATH, 'notifier', 'presently')
|
68
71
|
end
|
69
72
|
|
@@ -74,20 +77,23 @@ module Backup
|
|
74
77
|
end
|
75
78
|
|
76
79
|
module Compressor
|
77
|
-
autoload :Base,
|
78
|
-
autoload :Gzip,
|
80
|
+
autoload :Base, File.join(CONFIGURATION_PATH, 'compressor', 'base')
|
81
|
+
autoload :Gzip, File.join(CONFIGURATION_PATH, 'compressor', 'gzip')
|
79
82
|
autoload :Bzip2, File.join(CONFIGURATION_PATH, 'compressor', 'bzip2')
|
83
|
+
autoload :Lzma, File.join(CONFIGURATION_PATH, 'compressor', 'lzma')
|
80
84
|
end
|
81
85
|
|
82
86
|
module Storage
|
83
87
|
autoload :Base, File.join(CONFIGURATION_PATH, 'storage', 'base')
|
84
88
|
autoload :S3, File.join(CONFIGURATION_PATH, 'storage', 's3')
|
85
89
|
autoload :CloudFiles, File.join(CONFIGURATION_PATH, 'storage', 'cloudfiles')
|
90
|
+
autoload :Ninefold, File.join(CONFIGURATION_PATH, 'storage', 'ninefold')
|
86
91
|
autoload :Dropbox, File.join(CONFIGURATION_PATH, 'storage', 'dropbox')
|
87
92
|
autoload :FTP, File.join(CONFIGURATION_PATH, 'storage', 'ftp')
|
88
93
|
autoload :SFTP, File.join(CONFIGURATION_PATH, 'storage', 'sftp')
|
89
94
|
autoload :SCP, File.join(CONFIGURATION_PATH, 'storage', 'scp')
|
90
95
|
autoload :RSync, File.join(CONFIGURATION_PATH, 'storage', 'rsync')
|
96
|
+
autoload :Local, File.join(CONFIGURATION_PATH, 'storage', 'local')
|
91
97
|
end
|
92
98
|
|
93
99
|
module Syncer
|
@@ -111,11 +117,13 @@ module Backup
|
|
111
117
|
autoload :Object, File.join(STORAGE_PATH, 'object')
|
112
118
|
autoload :S3, File.join(STORAGE_PATH, 's3')
|
113
119
|
autoload :CloudFiles, File.join(STORAGE_PATH, 'cloudfiles')
|
120
|
+
autoload :Ninefold, File.join(STORAGE_PATH, 'ninefold')
|
114
121
|
autoload :Dropbox, File.join(STORAGE_PATH, 'dropbox')
|
115
122
|
autoload :FTP, File.join(STORAGE_PATH, 'ftp')
|
116
123
|
autoload :SFTP, File.join(STORAGE_PATH, 'sftp')
|
117
124
|
autoload :SCP, File.join(STORAGE_PATH, 'scp')
|
118
125
|
autoload :RSync, File.join(STORAGE_PATH, 'rsync')
|
126
|
+
autoload :Local, File.join(STORAGE_PATH, 'local')
|
119
127
|
end
|
120
128
|
|
121
129
|
##
|
@@ -139,9 +147,10 @@ module Backup
|
|
139
147
|
##
|
140
148
|
# Autoload compressor files
|
141
149
|
module Compressor
|
142
|
-
autoload :Base,
|
143
|
-
autoload :Gzip,
|
150
|
+
autoload :Base, File.join(COMPRESSOR_PATH, 'base')
|
151
|
+
autoload :Gzip, File.join(COMPRESSOR_PATH, 'gzip')
|
144
152
|
autoload :Bzip2, File.join(COMPRESSOR_PATH, 'bzip2')
|
153
|
+
autoload :Lzma, File.join(COMPRESSOR_PATH, 'lzma')
|
145
154
|
end
|
146
155
|
|
147
156
|
##
|
@@ -155,11 +164,11 @@ module Backup
|
|
155
164
|
##
|
156
165
|
# Autoload notification files
|
157
166
|
module Notifier
|
158
|
-
autoload :Base,
|
159
|
-
autoload :Binder,
|
160
|
-
autoload :Mail,
|
161
|
-
autoload :Twitter,
|
162
|
-
autoload :Campfire,
|
167
|
+
autoload :Base, File.join(NOTIFIER_PATH, 'base')
|
168
|
+
autoload :Binder, File.join(NOTIFIER_PATH, 'binder')
|
169
|
+
autoload :Mail, File.join(NOTIFIER_PATH, 'mail')
|
170
|
+
autoload :Twitter, File.join(NOTIFIER_PATH, 'twitter')
|
171
|
+
autoload :Campfire, File.join(NOTIFIER_PATH, 'campfire')
|
163
172
|
autoload :Presently, File.join(NOTIFIER_PATH, 'presently')
|
164
173
|
end
|
165
174
|
|
@@ -167,6 +176,7 @@ module Backup
|
|
167
176
|
# Autoload exception classes
|
168
177
|
module Exception
|
169
178
|
autoload :CommandNotFound, File.join(EXCEPTION_PATH, 'command_not_found')
|
179
|
+
autoload :CommandFailed, File.join(EXCEPTION_PATH, 'command_failed')
|
170
180
|
end
|
171
181
|
|
172
182
|
##
|
data/lib/backup/cli.rb
CHANGED
@@ -23,9 +23,15 @@ module Backup
|
|
23
23
|
def run(command)
|
24
24
|
command.gsub!(/^\s+/, '')
|
25
25
|
raise_if_command_not_found!(
|
26
|
-
|
26
|
+
command_name(command)
|
27
27
|
)
|
28
|
-
|
28
|
+
|
29
|
+
pid, stdin, stdout, stderr = Open4::popen4(command)
|
30
|
+
ignored, @status = Process::waitpid2(pid)
|
31
|
+
@stdout = stdout.read
|
32
|
+
@stderr = stderr.read
|
33
|
+
|
34
|
+
raise_if_command_failed!(command_name(command), @status)
|
29
35
|
end
|
30
36
|
|
31
37
|
##
|
@@ -63,6 +69,10 @@ module Backup
|
|
63
69
|
name
|
64
70
|
end
|
65
71
|
|
72
|
+
def command_name(command)
|
73
|
+
command.slice(0, command.index(/\s/)).split('/')[-1]
|
74
|
+
end
|
75
|
+
|
66
76
|
##
|
67
77
|
# If the command that was previously run via this Ruby process returned
|
68
78
|
# error code "32512", the invoked utility (e.g. mysqldump, pgdump, etc) could not be found.
|
@@ -78,5 +88,23 @@ module Backup
|
|
78
88
|
end
|
79
89
|
end
|
80
90
|
|
91
|
+
##
|
92
|
+
# If the command that was previously run via this Ruby process returned
|
93
|
+
# a non-zero error code, the invoked utility (e.g. mysqldump, pgdump, etc) failed to run.
|
94
|
+
# If this is the case then this method will throw an exception, informing the user of this problem.
|
95
|
+
#
|
96
|
+
# Since this raises an exception, it'll stop the entire backup process, clean up the temp files
|
97
|
+
# and notify the user via the built-in notifiers if these are set.
|
98
|
+
def raise_if_command_failed!(utility, status)
|
99
|
+
unless status.to_i.eql?(0)
|
100
|
+
raise Exception::CommandFailed , "Failed to run \"#{utility}\" on \"#{RUBY_PLATFORM}\".\n" +
|
101
|
+
"The status code returned was #{status}\n" +
|
102
|
+
"STDOUT was:\n" +
|
103
|
+
@stdout +
|
104
|
+
"STDERR was:\n" +
|
105
|
+
@stderr
|
106
|
+
end
|
107
|
+
end
|
108
|
+
|
81
109
|
end
|
82
110
|
end
|
@@ -0,0 +1,63 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
module Backup
|
4
|
+
module Compressor
|
5
|
+
class Lzma < Base
|
6
|
+
|
7
|
+
##
|
8
|
+
# Tells Backup::Compressor::Lzma to compress
|
9
|
+
# better (-9) rather than faster when set to true
|
10
|
+
attr_writer :best
|
11
|
+
|
12
|
+
##
|
13
|
+
# Tells Backup::Compressor::Lzma to compress
|
14
|
+
# faster (-1) rather than better when set to true
|
15
|
+
attr_writer :fast
|
16
|
+
|
17
|
+
##
|
18
|
+
# Creates a new instance of Backup::Compressor::Lzma and
|
19
|
+
# configures it to either compress faster or better
|
20
|
+
# Lzma compresses by default with -9 (best compression)
|
21
|
+
# and lower block sizes don't make things significantly faster
|
22
|
+
# (according to official bzip2 docs)
|
23
|
+
def initialize(&block)
|
24
|
+
load_defaults!
|
25
|
+
|
26
|
+
@best ||= false
|
27
|
+
@fast ||= false
|
28
|
+
|
29
|
+
instance_eval(&block) if block_given?
|
30
|
+
end
|
31
|
+
|
32
|
+
##
|
33
|
+
# Performs the compression of the packages backup file
|
34
|
+
def perform!
|
35
|
+
log!
|
36
|
+
run("#{ utility(:lzma) } #{ options } '#{ Backup::Model.file }'")
|
37
|
+
Backup::Model.extension += '.lzma'
|
38
|
+
end
|
39
|
+
|
40
|
+
private
|
41
|
+
|
42
|
+
##
|
43
|
+
# Combines the provided options and returns a bzip2 options string
|
44
|
+
def options
|
45
|
+
(best + fast).join("\s")
|
46
|
+
end
|
47
|
+
|
48
|
+
##
|
49
|
+
# Returns the lzma option syntax for compressing
|
50
|
+
# setting @best to true is redundant, as lzma compresses best by default
|
51
|
+
def best
|
52
|
+
return ['--best'] if @best; []
|
53
|
+
end
|
54
|
+
|
55
|
+
##
|
56
|
+
# Returns the lzma option syntax for compressing
|
57
|
+
# (not significantly) faster when @fast is set to true
|
58
|
+
def fast
|
59
|
+
return ['--fast'] if @fast; []
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
module Backup
|
4
|
+
module Configuration
|
5
|
+
module Compressor
|
6
|
+
class Lzma < Base
|
7
|
+
class << self
|
8
|
+
|
9
|
+
##
|
10
|
+
# Tells Backup::Compressor::Lzma to compress
|
11
|
+
# better (--best) which is lzma default anyway
|
12
|
+
attr_accessor :best
|
13
|
+
|
14
|
+
##
|
15
|
+
# Tells Backup::Compressor::Lzma to compress
|
16
|
+
# faster (--fast) (but not significantly faster)
|
17
|
+
attr_accessor :fast
|
18
|
+
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -8,13 +8,19 @@ module Backup
|
|
8
8
|
# Finds all the object's getter methods and checks the global
|
9
9
|
# configuration for these methods, if they respond then they will
|
10
10
|
# assign the object's attribute(s) to that particular global configuration's attribute
|
11
|
-
def load_defaults!
|
12
|
-
c
|
13
|
-
configuration
|
11
|
+
def load_defaults!(options = {})
|
12
|
+
c = self.class.name.split('::')
|
13
|
+
configuration = Backup::Configuration.const_get(c[1]).const_get(c[2])
|
14
|
+
options[:except] ||= []
|
15
|
+
options[:only] ||= []
|
14
16
|
|
15
17
|
getter_methods.each do |attribute|
|
16
18
|
if configuration.respond_to?(attribute)
|
17
|
-
|
19
|
+
if options[:only].any? and options[:only].include?(attribute)
|
20
|
+
self.send("#{attribute}=", configuration.send(attribute))
|
21
|
+
elsif options[:except].any? and !options[:except].include?(attribute)
|
22
|
+
self.send("#{attribute}=", configuration.send(attribute))
|
23
|
+
elsif options[:only].empty? and options[:except].empty?
|
18
24
|
self.send("#{attribute}=", configuration.send(attribute))
|
19
25
|
end
|
20
26
|
end
|
@@ -45,6 +45,11 @@ module Backup
|
|
45
45
|
# Example: true
|
46
46
|
attr_accessor :enable_starttls_auto
|
47
47
|
|
48
|
+
##
|
49
|
+
# OpenSSL Verify Mode
|
50
|
+
# Example: none - Only use this option for a self-signed and/or wildcard certificate
|
51
|
+
attr_accessor :openssl_verify_mode
|
52
|
+
|
48
53
|
end
|
49
54
|
end
|
50
55
|
end
|
@@ -6,10 +6,6 @@ module Backup
|
|
6
6
|
class Dropbox < Base
|
7
7
|
class << self
|
8
8
|
|
9
|
-
##
|
10
|
-
# Dropbox user credentials
|
11
|
-
attr_accessor :email, :password
|
12
|
-
|
13
9
|
##
|
14
10
|
# Dropbox API credentials
|
15
11
|
attr_accessor :api_key, :api_secret
|
@@ -22,6 +18,25 @@ module Backup
|
|
22
18
|
# Dropbox connection timeout
|
23
19
|
attr_accessor :timeout
|
24
20
|
|
21
|
+
|
22
|
+
# DEPRECATED METHODS #############################################
|
23
|
+
|
24
|
+
def email
|
25
|
+
Logger.warn "[DEPRECATED] Backup::Configuration::Storage::Dropbox.email is deprecated and will be removed at some point."
|
26
|
+
end
|
27
|
+
|
28
|
+
def email=(value)
|
29
|
+
Logger.warn "[DEPRECATED] Backup::Configuration::Storage::Dropbox.email= is deprecated and will be removed at some point."
|
30
|
+
end
|
31
|
+
|
32
|
+
def password
|
33
|
+
Logger.warn "[DEPRECATED] Backup::Configuration::Storage::Dropbox.password is deprecated and will be removed at some point."
|
34
|
+
end
|
35
|
+
|
36
|
+
def password=(value)
|
37
|
+
Logger.warn "[DEPRECATED] Backup::Configuration::Storage::Dropbox.password= is deprecated and will be removed at some point."
|
38
|
+
end
|
39
|
+
|
25
40
|
end
|
26
41
|
end
|
27
42
|
end
|